我是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"`
答案 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
。