我试图在Password
表上创建一个外键,它必须指向User
表中的id
列。但当我尝试以下方法时,它不起作用。foreign key
不会生成。它只是在password
表中添加列名user_id
。
package schema
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
type User struct {
gorm.Model
FirstName string `gorm:"not null"`
LastName string `gorm:"not null"`
Email string `gorm:"type:varchar(100);unique_index"`
IsActive bool `gorm:"not null"`
IsVerified bool `gorm:"not null"`
}
type Password struct {
gorm.Model
Password string `gorm:"not null"`
UserId int `gorm:"not null"`
User User `gorm:"foreignkey:UserId;association_foreignkey:id"`
}
func SyncDB(db *gorm.DB) {
db.AutoMigrate(&User{})
db.AutoMigrate(&Password{})
}
我做错了什么?如何在Password
表中创建指向User
表的外键?
3条答案
按热度按时间yfjy0ee71#
我认为你需要:
我把我的放在我的自动迁移语句之后,就像这样
如果有帮助就告诉我。
j9per5c42#
在我们的例子中,我们需要在列名/字段名方面具有完全的灵活性,因为我们正在迁移一个最初由SQLAlchemy创建的现有数据库。不使用Gorm期望的名称会导致不生成外键。
使用Gorm 2.0,由于某种原因仍然有v1标签(
gorm.io/gorm v1.25.1
),技巧是正确使用foreignkey
(必须指向本地字段)和references
(大多数指向外部表中的远程字段)注解完全任意的名称:这将产生正确的外键关系:
oknwwptz3#
试试这个。