Мой первый день с Го. Я пытаюсь разработать механизм миграции с помощью 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{})
Что мне не хватает?
Вам нужен столбец 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")
Вскоре вам нужно установить внешние ключи сразу после переноса таблиц.