进行迁移不会创建外键

时间:2019-06-19 20:53:27

标签: go go-gorm revel

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

我只需按以下方式自动迁移两个结构,即可正常工作。我看到名为用户和角色的表,但用户表没有字段 role_id roleID

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

我想念什么?

2 个答案:

答案 0 :(得分:1)

您需要一个RoleID列,如果您对其进行命名,则也无需声明foreignkey

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

有关更多信息,请参见this page

答案 1 :(得分:0)

我找到了解决方法。

首先,尽管蒂姆·布朗的答案是与文档兼容的有效答案,但这是行不通的。如许多论坛帖子和github问题中所述,GORM外键不会按照文档中的说明自动生成。

但这有帮助:

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

不久之后,您需要在迁移表之后设置外键。