首頁 >後端開發 >Golang >如何使用 GORM 儲存嵌入式結構?

如何使用 GORM 儲存嵌入式結構?

DDD
DDD原創
2024-11-04 03:09:01904瀏覽

How to Store Embedded Structs with GORM?

使用 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn