猿问

如何使用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"

}

用户信息模型:


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 与用户表的 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

}

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


互换的青春
浏览 319回答 4
4回答

UYOU

笔记!从 gorm 2.0 开始,这不再是必需的解决办法是在迁移数据库的时候加入这一行:db.Model(&models.UserInfo{}).AddForeignKey("u_id", "t_user(id)", "RESTRICT", "RESTRICT")

沧海一幻觉

我发现以下代码无需执行任何自定义迁移代码即可正确创建外键;只是平常的AutoMigrate。type Account struct {    ID uint `gorm:"primary_key"`}type Transaction struct {    ID        uint `gorm:"primary_key"`    AccountID uint    Account   Account `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`}我正在使用“Gorm 2.0”,它是gorm.io/gorm v1.23.3.

红颜莎娜

阅读https://gorm.io/docs/belongs_to.html中的属于关系 此外,这里有一个很好的例子: https: //medium.com/@the.hasham.ali/how-to-use-uuid -key-type-with-gorm-cc00d4ec7100// User is the model for the user table.type User struct { Base SomeFlag bool    `gorm:"column:some_flag;not null;default:true"` Profile  Profile}// Profile is the model for the profile table.type Profile struct { Base Name   string    `gorm:"column:name;size:128;not null;"` UserID uuid.UUID `gorm:"type:uuid;column:user_foreign_key;not null;"`}

aluckdog

我们可以在最新版本中使用添加外键约束CreateConstraint。示例:假设我们有两个实体type User struct {  gorm.Model  CreditCards []CreditCard}type CreditCard struct {  gorm.Model  Number string  UserID uint}现在为用户和信用卡创建数据库外键db.Migrator().CreateConstraint(&User{}, "CreditCards")db.Migrator().CreateConstraint(&User{}, "fk_users_credit_cards")转换为 Postgres 的以下 SQL 代码:ALTER TABLE `credit_cards` ADD CONSTRAINT `fk_users_credit_cards` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`)
随时随地看视频慕课网APP

相关分类

Go
我要回答