GORM定义同表自引用模型时报failed to set value 0错误如何解决
同表自引用GORM模型正确配置方案
错误原因
- 原配置中
foreignKey:Parent指向的是关联结构体字段本身(*Model类型),没有定义专门存储父级主键ID的外键存储字段,GORM无法将父级ID(无父级时为0)映射到正确的存储列,因此触发赋值错误。
正确配置示例
import "gorm.io/gorm" type Model struct { gorm.Model Code string `bson:"code" json:"code" gorm:"uniqueIndex"` Name string `bson:"name" json:"name"` // 新增外键存储字段,类型和gorm.Model.ID保持一致,指针类型支持null表示无父节点 ParentID *uint `bson:"parent_id" json:"parent_id" gorm:"index"` // 配置关联关系:foreignKey指定用ParentID存储外键,references指定关联目标的主键为ID Parent *Model `bson:"parent" json:"parent" gorm:"foreignKey:ParentID;references:ID"` }
常见使用说明
- 创建根节点(无父级):直接省略
ParentID和Parent赋值,或显式将ParentID设为nil即可,GORM会自动给外键列存null。 - 创建子节点:可以直接赋值
ParentID为已存在的父节点ID,也可以直接给Parent字段赋值父节点实例,GORM会自动提取ID写入ParentID字段。 - 查询时加载父节点:使用
db.Preload("Parent").First(&model, id)即可同时查询到关联的父节点信息。
内容的提问来源于stack exchange,提问作者waghcwb
相关产品推荐
相关产品推荐

