零对多:无法添加或更新子行:外键约束失败

时间:2019-02-11 07:35:24

标签: mysql go go-gorm

我是Go and Gorm的新手。我想解析API响应并存储两个表。 对于每个“报告”表,可以有零到多个“ personal_details”表。

但是,gorm在应用外键约束时出错,因为有时API响应中没有PersonalDetail的记录。

我关注了gorm文档并尝试了“多对多”关系,但我认为这对零对多关系不起作用

db.Model(&Report{}).AddForeignKey("personal_detail_id", "personal_details(id)", "RESTRICT", "RESTRICT")

type Report struct{
  gorm.Model
  PersonalDetail PersonalDetail `json:"PersonalDetail" gorm:"foreignkey:PersonalDetailId"`
  PersonalDetailId uint
}

type PersonalDetail struct{
  gorm.Model
  Name string `json:"Name"`
  Age string `json:"Age"`

1 个答案:

答案 0 :(得分:0)

尝试像这样定义模型:

type Report struct {
  gorm.Model
  PersonalDetail PersonalDetail `json:"PersonalDetail" gorm:"foreignkey:ReportId"`
}

type PersonalDetail struct {
  gorm.Model
  Name string `json:"Name"`
  Age string `json:"Age"`
  ReportId uint `sql:"type:bigint REFERENCES reports(id) ON DELETE CASCADE"`
}

我在使外键在GORM中工作时遇到了一些麻烦,因此我发现使用SQL标记定义关系似乎更好。它不是很干净,因为您需要定义实际的数据库名称而不是字段名称,但是它可以工作。

还请记住迁移表的顺序。您可能需要按顺序进行操作,这样就不会引用尚未创建的表。对于此示例,请在Reports之前迁移PersonalDetail