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

Gorm不会在多对多关系中创建外键,go,many-to-many,go-gorm,Go,Many To Many,Go Gorm,我在尝试使用gorm生成DB时遇到问题。 当我构建DB gorm时,所有表和RelationshipsForeive键都已成功生成,但多对多关系除外。我确实生成了关联表,但没有外键 我有以下结构:设备和组。组可以有多个设备,并且同一设备可以位于多个组中 //Group group of devices type Group struct { gorm.Model Name string SVG string Devic

我在尝试使用gorm生成DB时遇到问题。 当我构建DB gorm时,所有表和RelationshipsForeive键都已成功生成,但多对多关系除外。我确实生成了关联表,但没有外键

我有以下结构:设备和组。组可以有多个设备,并且同一设备可以位于多个组中

//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:没有唯一约束匹配引用表设备组的给定键

如您所见:它正在生成设备组表,但没有外键。 我尝试使用字段标记,尝试修改AddForeignKey函数或删除它,但似乎没有任何效果

有什么想法吗


谢谢

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

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

工作!在你回答之后,这看起来很明显。希望他们的文档将得到更新,并包含此示例。