在GORM 中嵌入結構體進行資料儲存
在GORM 中,當您想要將嵌套結構體儲存在其中時,處理嵌入結構體可能是一個挑戰與父結構相同的表。預設情況下,GORM 假定嵌入結構作為單獨的實體,並嘗試為它們建立一個新表。但是,您可能更願意將嵌入結構作為父結構表中的附加欄位包含在內。
解決方案
一個有效的解決方案涉及實作 Scan() 和 Value () 方法用於表示嵌入結構數組的自訂類型。這些方法允許 GORM 將嵌入式結構序列化為 JSON 或反序列化為 JSON,從而實現無縫儲存和檢索。
為了進行說明,請考慮以下範例:
<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>
此處,ChildArray 自訂type 表示嵌入的 Child 結構陣列。它實作了 Scan() 和 Value() 方法來處理 JSON 序列化和反序列化。
要將ChildArray 嵌入並儲存在Parent 結構中,您可以如下定義模型:
<code class="go">type Parent struct { *gorm.Model Childrens ChildArray `gorm:"column:childrens;type:longtext"` }</code>
透過此配置,GORM 將Childrens 欄位識別為自訂類型,並在與資料庫互動時自動將嵌入的Child 結構與JSON 進行序列化和反序列化。
以上是如何將 GORM 中的嵌入結構儲存在與父結構相同的表中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!