Membenamkan Struktur dalam GORM untuk Penyimpanan Data
Dalam GORM, pengendalian struct terbenam boleh menjadi satu cabaran apabila anda ingin menyimpan struct bersarang dalam jadual yang sama dengan struct induk. Secara lalai, GORM menganggap struktur terbenam sebagai entiti berasingan dan cuba mencipta jadual baharu untuknya. Walau bagaimanapun, anda mungkin memilih untuk memasukkan struct terbenam sebagai medan tambahan dalam jadual struct induk.
Penyelesaian
Satu penyelesaian berkesan melibatkan pelaksanaan Scan() dan Nilai () kaedah untuk jenis tersuai yang mewakili tatasusunan struct terbenam. Kaedah ini membenarkan GORM mensiri dan menyahsiri struct terbenam ke dan dari JSON, membolehkan penyimpanan dan pengambilan yang lancar.
Sebagai ilustrasi, pertimbangkan contoh berikut:
<code class="go">type Child struct { Lat float64 Lng float64 } type ChildArray []Children 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 }</code>
Di sini, tersuai ChildArray jenis mewakili tatasusunan terbenam struct Kanak-kanak. Ia melaksanakan kaedah Imbas() dan Nilai() untuk mengendalikan pensirilan dan penyahserilangan JSON.
Untuk membenamkan dan menyimpan ChildArray dalam struct Induk, anda boleh mentakrifkan model seperti berikut:
<code class="go">type Parent struct { *gorm.Model Childrens ChildArray `gorm:"column:childrens;type:longtext"` }</code>
Dengan konfigurasi ini, GORM mengiktiraf medan Childrens sebagai jenis tersuai dan secara automatik mensiri dan menyahsiri struct Child terbenam ke dan dari JSON apabila berinteraksi dengan pangkalan data.
Atas ialah kandungan terperinci Bagaimana untuk Menyimpan Struktur Terbenam dalam GORM dalam Jadual yang Sama dengan Struktur Induk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!