Go 迁移不会创建外键



我在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角色 ID

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

我错过了什么?

我找到了解决方案。

首先,尽管 Tim Brown 的答案是与文档兼容的有效答案,但它不起作用。正如许多论坛帖子和 github 问题中提到的,GORM 外键不是自动生成的,如文档中所述。

但这有助于:

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

很快,您需要在迁移表后设置外键。

你需要

一个RoleID列,如果你命名它,你也不需要声明foreignkey

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

有关更多信息,请参阅此页面

最新更新