Golang Gorm 数据插入 MySQL 失败 Error 1054: Unknown column 'xx' in 'field list'

更新日期: 2023-06-19 阅读次数: 9707 字数: 316 分类: golang

原因是,我 Struct 中定义了一个新字段,为了方便在接口返回数据时,能补充一个数据库中没有的信息。

这导致在 Gorm 插入 MySQL 时报错,提示未知字段错误。

插入时,忽略指定字段

查了一下,发现 Gorm 有个字段标签的功能,可以方便的忽略特定字段:

https://gorm.io/zh_CN/docs/models.html#%E5%AD%97%E6%AE%B5%E6%A0%87%E7%AD%BE

-	忽略该字段,- 无读写权限

甚至可以更细分的控制,读和写分别设置是否忽略。

例如:

type User struct {
  Name string `gorm:"-"`  // 通过 struct 读写会忽略该字段
}

Field: unsupported relations for schema MyTable

但是有个地方需要注意,例如下面这个 Struct (用户开卡信息,里面有个 Agent 字段,代表代理商信息,通过 Preload 获取)

type UserCard struct {
	gorm.Model
	UserId        int     // 客户 ID
	Price         float64 // 购买时的价格
        AgentId       int     // 代理商 ID
	Agent         Agent   `gorm:"-"` // 代理商信息。禁止写入是防止 insert 时报不存在字段的错误。
}

执行 Preload 时,报错:

Agent: unsupported relations for schema UserCard

原因是 Agent 被设置成了不可读/不可写。

需要改成只读:

Agent         Agent   `gorm:"->"`

tags: gorm

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式