首页 > 后端开发 > Golang > 如何使用 GORM 存储嵌入式结构?

如何使用 GORM 存储嵌入式结构?

DDD
发布: 2024-11-04 03:09:01
原创
933 人浏览过

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 编码字符串。检索数据时,GORM 会自动将 JSON 字符串解组回 Childrens 数组。

以上是如何使用 GORM 存储嵌入式结构?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板