作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我是 Go 和 Gorm 的新手。我想解析 API 响应并存储两个表。对于每个“reports”表,可以有“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"`
最佳答案
尝试像这样定义你的模型:
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 标记来定义关系似乎效果更好。它不是很干净,因为您需要定义实际的数据库名称而不是字段名称,但它可以工作。
还要记住迁移表的顺序。您可能需要按顺序执行此操作,以便不引用尚未创建的表。对于此示例,在 PersonalDetail
之前迁移 Reports
。
关于mysql - 零到多 : Cannot add or update a child row: a foreign key constraint fails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54625825/
我是一名优秀的程序员,十分优秀!