gpt4 book ai didi

go - Gorm不会在多对多关系中创建外键

转载 作者:行者123 更新时间:2023-12-01 22:16:19 29 4
gpt4 key购买 nike

尝试使用gorm生成数据库时遇到问题。
除多对多关系外,所有表和关系(外键)均已成功生成,当我构建数据库时,gorm确实生成了关联表,但没有外键。

我有以下结构:设备和组。 (组中可以有1个以上的设备,而同一设备中可以有1个以上的设备)

//Group group of devices
type Group struct {
gorm.Model
Name string
SVG string
Devices []*Device `gorm:"many2many:device_group;"`//association_foreignkey:id;foreignkey:id"`
}

//设备是单一的物理量测量设备
type Device struct {
gorm.Model
DeviceName string
Svg string
IP string
LastActive time.Time
MAC string
Version string
Groups []*Group `gorm:"many2many:device_group;"`
}

添加外键:
db.Model(device).AddForeignKey("id", "device_group(device_id)", "CASCADE", "CASCADE")
db.Model(group).AddForeignKey("id", "device_group(group_id)", "CASCADE", "CASCADE")

添加外键功能给我以下错误:

[2020-01-28 11:53:11] pq:没有与给定表“device_group”的键匹配的唯一约束

如您所见:它正在生成device_group表,但是没有外键。
我尝试使用字段标签,尝试修改AddForeignKey函数或将其删除,但似乎无济于事。

enter image description here

有任何想法吗?

谢谢

最佳答案

引用的键必须是主键,因此您必须反过来添加约束。以下代码适用于我:

db.Table("device_group").AddForeignKey("device_id", "devices(id)", "CASCADE", "CASCADE")
db.Table("device_group").AddForeignKey("group_id", "groups(id)", "CASCADE", "CASCADE")

关于go - Gorm不会在多对多关系中创建外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59946217/

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