You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:06:05