admin管理员组

文章数量:1636810

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. 相信我,一般是foreignKeyreferences哪个单词或符号写错、字段名写错,或者json和gorm中间少了空格之类的。把下面这段复制下来重新改下吧。
    `gorm:"foreignKey:关联表的结构体字段;references:当前表的结构体字段;`
    
  2. 还有,结构体中的字段名要大写
    下面的示例中,projectId这个首字母小写了,也会出现相同的报错
type DtProjectWorkerRel struct {
	gorm.Model
	#这个字段名首字母小写了(私有化),导致gorm无法访问。
	projectId    uint   `gorm:"comment:项目id;unique_index:project_company_idcard_idx"`
	Project DtProject `gorm:"foreignKey:ID;references:ProjectId;"`
	}
  1. 如果还是报错,gorm后面直接用"-"。像下面这样
    
    type UpLoadFile struct {
    	gorm.Model
    	FileName    string    `json:"file_name" gorm:"comment:文件名"`
    	FileChunk   []FileChunk `json:"file_chunk" gorm:"-"`
    }
    
    type FileChunk struct {
    	gorm.Model
    	FileId          uint
    	FileChunkNumber int
    	FileChunkPath   string
    }
    

顺带提一下1:

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

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

顺带提一下2

references:后面跟随的字段名,在gorm文档中是按照生成的数据表中的字段名来写的:

但是参考gin-vue-admin框架中的写法,references:后面的字段名是跟随结构体驼峰式命名的

我在测试时,尝试在references:后面使用了数据表中带下划线的字段名结构体中的驼峰式字段名,都没有报错,说明两种方案都是支持的。

本文标签: 报错初始化Validforeigngorm