首页 >后端开发 >Golang >如何将 GORM 中的嵌入结构存储在与父结构相同的表中?

如何将 GORM 中的嵌入结构存储在与父结构相同的表中?

Patricia Arquette
Patricia Arquette原创
2024-11-03 06:08:02789浏览

How to Store Embedded Structs in GORM within the Same Table as the Parent Struct?

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn