Как сделать внешний ключ с помощью gorm - PullRequest
0 голосов
/ 26 октября 2018

У меня есть две модели:

Модель пользователя:

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

func (User) TableName() string {
    return "t_user"
}

Модель информации о пользователе:

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"
}

, и я хочу сделать UID связанным с идентификаторомпользовательской таблицы.

это функция, которая создает пользователя:

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
}

Я попробовал то, что gorm написал в документации, но безуспешно: http://doc.gorm.io/associations.html

1 Ответ

0 голосов
/ 27 октября 2018

Решение заключается в добавлении этой строки при переносе базы данных:

db.Model(&models.UserInfo{}).AddForeignKey("u_id", "t_user(id)", "RESTRICT", "RESTRICT")

миграция (документация gorm)

...