登录
首页 >  Golang >  Go问答

Gorm如何定义一对一

来源:SegmentFault

时间:2023-01-12 19:26:21 254浏览 收藏

本篇文章给大家分享《Gorm如何定义一对一》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

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

User表 :

字段名称
id1001
usernamewang
status1

User_info表 :

字段名称
id1
user_id1001
age40
openidxxxxx

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

正确答案

大概就是这个样子,主要要在 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)

今天带大家了解了gorm的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表