在处理以下类型时,使用 GORM 存储嵌入式结构会带来挑战:
<code class="go">type A struct { point GeoPoint } type GeoPoint struct { Lat float64 Lon float64 }</code>
默认情况下, GORM 尝试为嵌入的结构 GeoPoint 创建一个单独的表。但是,要将其添加为父结构 A 中的字段,请考虑以下受 Chris 见解启发的解决方案:
<code class="go">import ( "encoding/json" "gorm.io/gorm" ) // Define custom Scan and Value methods for ChildArray to enable automatic marshalling and unmarshalling. 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 } // Define the parent struct with the embedded ChildArray. type Parent struct { *gorm.Model Childrens ChildArray `gorm:"column:childrens;type:longtext"` }</code>
此方法允许对父结构中的嵌入式结构进行无缝编组和解组,确保它作为单个实体从数据库中存储和检索。
以上是如何将 GORM 中的嵌入式结构作为单个实体存储?的详细内容。更多信息请关注PHP中文网其他相关文章!