Gorm如何定义一对一

有2张表,User表和User_info表,结构如下

User表 :

字段名称
id1001
usernamewang
status1

User_info表 :

字段名称
id1
user_id1001
age40
openidxxxxx

我想知道如何设置结构体,可以让我只需要查询user表,就可以一同查询出关联的user_info表。 看文档半天没看懂。

阅读 99
评论
    1 个回答
    • 1.6k

    大概就是这个样子,主要要在 Model 里定义好两个 model 的关系,然后查询 User 的时候 Prelod 下 UserInfo 就可以了..或者 拿到一个已有的 model 对象去 Related 他的关联对象;区别就是 related是取值到一个指定结构里,Preload 是取值到原有结构里的对象上

    type User struct {
        Uid  uint64  `gorm:"column:uid;primary_key"` 
        Username string `gorm:"column:username;type:varchar(50);"
        Status bool `gorm:"column:status;type:int(10)"`
        UserInfo UserInfo  `gorm:"ForeignKey:Uid;AssociationForeignKey:UserId"`
    }
    func(User)TableName() string {
        return "user"
    }
    
    type UserInfo struct {
        Id  uint64  `gorm:"column:id;primary_key"` 
        UserId uint64 `gorm:"column:user_id;type:bigint(20)"`
        Age  uint64 `gorm:"column:age;type:int(10)"`
        Openid string `gorm:"column:openid;type:varchar(250)"`
    }
    func(UserInfo)TableName()string{
        return "user_info"
    }
    
    orm,_ := gorm.Open(.....,.....)
    //使用一,preload
    var user User
    orm.Model(User{}).Preload("UserInfo").Find(&user,1001)
    fmt.Println(user.UserInfo.Age)
    
    //使用二 relate
    var u User
    var userInfo UserInfo
    orm.Find(&u,1001)
    orm.Model(&u).Related(&userInfo)
      撰写回答

      登录后参与交流、获取后续更新提醒