Gorm 不会在多对多关系中创建外键
Gorm doesn't create foreignkeys at many to many relationship
我在尝试使用 gorm 生成我的数据库时遇到问题。
除了多对多关系外,所有 table 和关系(外键)都已成功生成,当我构建 DB gorm 时确实生成了关联 table 但没有外来-键。
我有以下结构:设备和组。 (组内可多于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: there is no unique constraint matching given keys for referenced table "device_group"
如您所见:它正在生成 device_group table 但没有外键。
我尝试使用字段标签,尝试修改 AddForeignKey 函数或将其删除,但似乎没有任何效果。
有什么想法吗?
谢谢
引用的键必须是主键,因此您必须以相反的方式添加约束。以下代码适用于我:
db.Table("device_group").AddForeignKey("device_id", "devices(id)", "CASCADE", "CASCADE")
db.Table("device_group").AddForeignKey("group_id", "groups(id)", "CASCADE", "CASCADE")
我在尝试使用 gorm 生成我的数据库时遇到问题。 除了多对多关系外,所有 table 和关系(外键)都已成功生成,当我构建 DB gorm 时确实生成了关联 table 但没有外来-键。
我有以下结构:设备和组。 (组内可多于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: there is no unique constraint matching given keys for referenced table "device_group"
如您所见:它正在生成 device_group table 但没有外键。 我尝试使用字段标签,尝试修改 AddForeignKey 函数或将其删除,但似乎没有任何效果。
有什么想法吗?
谢谢
引用的键必须是主键,因此您必须以相反的方式添加约束。以下代码适用于我:
db.Table("device_group").AddForeignKey("device_id", "devices(id)", "CASCADE", "CASCADE")
db.Table("device_group").AddForeignKey("group_id", "groups(id)", "CASCADE", "CASCADE")