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"` }
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) }
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)
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!