天天看点

gorm 表初始化报错、外键报错:define a valid foreign key for relations or implement the Valuer/Scanner interface

gorm外键的规范性写法示例:

type DtProject struct {
	gorm.Model
	Name  string `json:"name" form:"name" gorm:"column:name;comment:;type:varchar(191);"`
}

type DtProjectWorkerRel struct {
	gorm.Model
	ProjectId    uint   `json:"projectId" gorm:"comment:项目id;unique_index:project_company_idcard_idx"`
	Project DtProject `gorm:"foreignKey:ID;references:ProjectId;"`
	}
           

报错处理思路:

  1. 相信我,一般是

    foreignKey

    references

    哪个单词或符号写错还有

    字段名

    写错,把下面这段复制下来重新改下吧。

顺带提一下1:

数据表的初始化顺序,按照逻辑,应当先创建DtProject 表(虽然这个外键功能初始化时是静态的,顺序写乱了也不会报错,但是这方面我认为应当要养成习惯)。

err := db.AutoMigrate(
	model.DtProject{},
	model.DtProjectWorkerRel{},
	)
           

顺带提一下2

references:

后面跟随的

字段名

,在gorm文档中是按照

生成的数据表中的字段名

来写的:

gorm 表初始化报错、外键报错:define a valid foreign key for relations or implement the Valuer/Scanner interface

但是参考gin-vue-admin框架中的写法,

references:

后面的字段名是

跟随结构体驼峰式命名的

gorm 表初始化报错、外键报错:define a valid foreign key for relations or implement the Valuer/Scanner interface

我在测试时,尝试在

references:

后面使用了

数据表中带下划线的字段名

结构体中的驼峰式字段名

,都没有报错,说明两种方案都是支持的。