Перейти миграция не создает внешний ключ - PullRequest
1 голос
/ 19 июня 2019

Мой первый день с Go.Я пытаюсь разработать механизм миграции с GORM в Revel.

Это мои модельные структуры:

type Role struct {
    gorm.Model
    Name string
}

type User struct {
    gorm.Model
    Name string
    Role Role  `gorm:"foreignkey:RoleIdForRole;association_foreignkey:Id"`
}

Я просто автоматизирую обе структуры следующим образом, что прекрасно работает.Я вижу таблицы, называемые пользователями и ролями, но в таблице пользователей нет поля role_id или roleID

db.AutoMigrate(&models.Role{})
db.AutoMigrate(&models.User{})

Что мне не хватает?

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Вам нужен столбец RoleID, и если вы назовете его, вам также не нужно будет указывать foreignkey.

type User struct {
    gorm.Model
    Name   string
    RoleID int `gorm:"column:RoleIdForRole"`
    Role   Role
}

См. эту страницу для получения дополнительной информации

0 голосов
/ 20 июня 2019

Я нашел решение.

Прежде всего, хотя ответ Тима Брауна является верным ответом, совместимым с документацией, он не работает.Как упоминалось во многих сообщениях на форуме и проблемах с github, внешний ключ GORM не генерируется автоматически, как указано в документации.

Но это помогает:

db.Model(&models.User{}).AddForeignKey("role_id", "roles(id)", "RESTRICT", "RESTRICT")

Вскоре вам нужно установить внешние ключи сразу послеперенос таблиц.

...