使用 GORM 儲存嵌入式結構
使用 GORM 和嵌入式結構時,了解 GORM 如何處理這些結構至關重要。例如,考慮以下結構:
type A struct { point GeoPoint } type GeoPoint struct { Lat float64 Lon float64 }
預設情況下,GORM 嘗試為嵌入結構(GeoPoint)建立單獨的表,這可能是不可取的。要將結構體作為欄位嵌入到同一個表中,我們需要使用列標籤手動指示 GORM。
解決方案:
將嵌入的結構體儲存為另一個結構體字段,將gorm:"column:..." 標記添加到嵌入的結構字段。例如:
type A struct { GORMModel Point GeoPoint `gorm:"embedded;column:point"` }
透過設定嵌入選項,GORM 識別嵌入結構並在 A 表中建立一個名為 point 的新欄位。列選項允許我們為欄位指定自訂名稱。
JSON 編組/解組的替代解決方案:
此修改後的解決方案可以自動編組/解組嵌入結構作為 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"` }
此方法將 Childrens 陣列作為 JSON 編碼字串儲存在 Childrens 欄位中。檢索資料時,GORM 會自動將 JSON 字串解組回 Childrens 陣列。
以上是如何使用 GORM 儲存嵌入式結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!