gpt4 book ai didi

mysql - 零到多 : Cannot add or update a child row: a foreign key constraint fails

转载 作者:IT王子 更新时间:2023-10-29 02:19:46 29 4
gpt4 key购买 nike

我是 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com