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"`
}

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

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

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

Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
1
0
992
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

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

Ответ принят как подходящий

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

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

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

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

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

Другие вопросы по теме