如何使用gorm制作外键

Nir*_*rko 3 go go-gorm

我有这两个模型:

用户模型:

type User struct {
    DBBase
    Email    string `gorm:"column:email" json:"email"`
    Password string `gorm:"column:password" json:"-"`
}

func (User) TableName() string {
    return "t_user"
}
Run Code Online (Sandbox Code Playgroud)

用户信息模型:

type UserInfo struct {
    User      User   `gorm:"foreignkey:u_id;association_foreignkey:id"`
    UID       uint   `gorm:"column:u_id" json:"-"`
    FirstName string `gorm:"column:first_name" json:"first_name"`
    LastName  string `gorm:"column:last_name" json:"last_name"`
    Phone     string `gorm:"column:phone" json:"phone"`
    Address   string `gorm:"column:address" json:"address"`
}

func (UserInfo) TableName() string {
    return "t_user_info"
}
Run Code Online (Sandbox Code Playgroud)

我想让 UID 与用户表的 id 相关。

这是创建用户的函数:

func (dao *AuthDAO) Register(rs app.RequestScope, user *models.User, userInfo *models.UserInfo) (userErr error, userInfoErr error) {
    createUser := rs.Db().Create(&user)
    userInfo.UID = user.ID
    createUserInfo := rs.Db().Create(&userInfo)

    return createUser.Error, createUserInfo.Error
}
Run Code Online (Sandbox Code Playgroud)

我确实尝试了 gorm 在文档上写的内容,但没有成功:http ://doc.gorm.io/associations.html

Nir*_*rko 7

解决办法是在迁移数据库的时候加上这一行:

db.Model(&models.UserInfo{}).AddForeignKey("u_id", "t_user(id)", "RESTRICT", "RESTRICT")
Run Code Online (Sandbox Code Playgroud)

迁移(gorm 文档)