Горм не создает чужих ключей во многих отношениях - PullRequest
0 голосов
/ 28 января 2020

У меня проблема при попытке создать мою БД с помощью gorm. все таблицы и отношения (внешние ключи) сгенерированы успешно, за исключением отношения многие ко многим, когда я строю ГБ БД генерирует таблицу ассоциации, но без внешних ключей.

У меня есть следующие структуры: устройство и группа. (в группе может быть более 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

есть идеи?

спасибо

1 Ответ

1 голос
/ 28 января 2020

Указанные ключи должны быть первичными ключами, поэтому вы должны добавить ограничения наоборот. Следующее работает для меня с вашим кодом:

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