在 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中文网其他相关文章!