Go迁移不会创建外键
Go migration doesn't create a foreign key
我使用 Go 的第一天。我尝试在 Revel 中使用 GORM 开发迁移机制。
这些是我的模型结构:
type Role struct {
gorm.Model
Name string
}
type User struct {
gorm.Model
Name string
Role Role `gorm:"foreignkey:RoleIdForRole;association_foreignkey:Id"`
}
我只是按如下方式自动迁移了两个结构,效果很好。我看到 tables 称为用户和角色,但用户 table 没有字段 role_id 或 roleID
db.AutoMigrate(&models.Role{})
db.AutoMigrate(&models.User{})
我错过了什么?
您需要一个 RoleID
列,如果您命名它,您也不需要声明 foreignkey
。
type User struct {
gorm.Model
Name string
RoleID int `gorm:"column:RoleIdForRole"`
Role Role
}
有关详细信息,请参阅 this page
我找到了解决方案。
首先,虽然 Tim Brown 的答案是与文档兼容的有效答案,但它不起作用。正如许多论坛帖子和 github 问题中提到的那样,GORM 外键并未按照文档中的说明自动生成。
但这有帮助:
db.Model(&models.User{}).AddForeignKey("role_id", "roles(id)", "RESTRICT", "RESTRICT")
不久您需要在迁移表后立即设置外键。
我使用 Go 的第一天。我尝试在 Revel 中使用 GORM 开发迁移机制。
这些是我的模型结构:
type Role struct {
gorm.Model
Name string
}
type User struct {
gorm.Model
Name string
Role Role `gorm:"foreignkey:RoleIdForRole;association_foreignkey:Id"`
}
我只是按如下方式自动迁移了两个结构,效果很好。我看到 tables 称为用户和角色,但用户 table 没有字段 role_id 或 roleID
db.AutoMigrate(&models.Role{})
db.AutoMigrate(&models.User{})
我错过了什么?
您需要一个 RoleID
列,如果您命名它,您也不需要声明 foreignkey
。
type User struct {
gorm.Model
Name string
RoleID int `gorm:"column:RoleIdForRole"`
Role Role
}
有关详细信息,请参阅 this page
我找到了解决方案。
首先,虽然 Tim Brown 的答案是与文档兼容的有效答案,但它不起作用。正如许多论坛帖子和 github 问题中提到的那样,GORM 外键并未按照文档中的说明自动生成。
但这有帮助:
db.Model(&models.User{}).AddForeignKey("role_id", "roles(id)", "RESTRICT", "RESTRICT")
不久您需要在迁移表后立即设置外键。