Menyimpan Struktur Terbenam dengan GORM
Apabila bekerja dengan GORM dan struktur terbenam, adalah penting untuk memahami cara GORM mengendalikan struktur ini. Sebagai contoh, pertimbangkan struct berikut:
type A struct { point GeoPoint } type GeoPoint struct { Lat float64 Lon float64 }
Secara lalai, GORM cuba mencipta jadual berasingan untuk struct terbenam (GeoPoint), yang mungkin tidak diingini. Untuk membenamkan struct sebagai medan dalam jadual yang sama, kita perlu mengarahkan GORM secara manual menggunakan tag lajur.
Penyelesaian:
Untuk menyimpan struct terbenam sebagai yang lain medan, tambahkan teg gorm:"column:..." pada medan struct terbenam. Contohnya:
type A struct { GORMModel Point GeoPoint `gorm:"embedded;column:point"` }
Dengan menetapkan pilihan terbenam, GORM mengenali struct terbenam dan mencipta medan baharu bernama titik dalam jadual A. Pilihan lajur membolehkan kami menentukan nama tersuai untuk medan.
Penyelesaian Alternatif untuk JSON Marshalling/Unmarshalling:
Penyelesaian yang diubah suai ini membolehkan marshalling/unmarshalling automatik bagi sesuatu struct terbenam sebagai lajur JSON.
type Child struct { Lat float64 Lng float64 } type ChildArray []Child func (sla *ChildArray) Scan(src interface{}) error { return json.Unmarshal(src.([]byte), &sla) } func (sla ChildArray) Value() (driver.Value, error) { val, err := json.Marshal(sla) return string(val), err } type Parent struct { GORMModel Childrens ChildArray `gorm:"column:childrens;type:longtext"` }
Pendekatan ini menyimpan tatasusunan Childrens sebagai rentetan berkod JSON dalam lajur kanak-kanak. Apabila mendapatkan semula data, GORM secara automatik menyahmarshal rentetan JSON kembali ke dalam tatasusunan Childrens.
Atas ialah kandungan terperinci Bagaimana untuk Menyimpan Struktur Terbenam dengan GORM?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!