Bagaimanakah Saya Boleh Menyimpan Sekeping Rentetan sebagai JSONB dalam Postgres Menggunakan GORM dan pgtype.JSONB?

Susan Sarandon
Lepaskan: 2024-11-20 16:47:39
asal
878 orang telah melayarinya

How Can I Store a Slice of Strings as JSONB in Postgres Using GORM and pgtype.JSONB?

Menggunakan pgtype.JSONB untuk Menyimpan Sepotong Rentetan sebagai JSONB dengan GORM dan Postgres

Pengguna GORM mungkin menghadapi cabaran apabila cuba menyimpan sekeping rentetan sebagai JSONB objek dalam Postgres tanpa bergantung pada jenis khusus GORM (postgres.Jsonb). Artikel ini membincangkan penyelesaian yang menggunakan pgtype.JSONB untuk mengatasi kesukaran ini.

Apabila menggunakan GORM dengan pgx, anda boleh memanfaatkan pakej pgtype untuk mewakili jenis data JSONB. Pakej ini menawarkan jenis pgtype.JSONB, yang menyediakan penyelesaian yang mudah untuk mengurus medan JSONB dalam struct Go anda.

Untuk melaksanakan kaedah ini, hanya tentukan struct anda seperti berikut:

// User represents a GORM model
type User struct {
    gorm.Model
    Data pgtype.JSONB `gorm:"type:jsonb;default:'[]';not null"`
}
Salin selepas log masuk

Dalam contoh ini, medan Data ditakrifkan sebagai pgtype.JSONB.

Mengakses JSONB Nilai

Untuk mendapatkan semula nilai medan Data daripada pangkalan data, anda boleh menggunakan kaedah AssignTo:

u := User{}
db.Find(&u)

var data []string
err := u.Data.AssignTo(&data)
if err != nil {
    log.Fatal(err)
}
Salin selepas log masuk

Menetapkan Nilai JSONB

Untuk mengemas kini medan Data dalam pangkalan data, gunakan kaedah Set:

u := User{}
err := u.Data.Set([]string{"abc", "def"})
if err != nil {
    return
}

db.Updates(&u)
Salin selepas log masuk

Pendekatan ini memanfaatkan keupayaan pemandu asas, menghapuskan keperluan untuk kod tersuai dan membolehkan pengendalian lancar bagi mana-mana jenis JSONB, bukan hanya []rentetan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyimpan Sekeping Rentetan sebagai JSONB dalam Postgres Menggunakan GORM dan pgtype.JSONB?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan