一架梯子,一头程序猿,仰望星空!
GORM面试题 > 内容正文

GORM怎么做关联查询?


问题简答

GORM 支持多种类型的关联查询,例如一对一、一对多、多对多等,主要是通过定义模型关联关系,然后通过HasOne、BelongsTo、HasMany、Preload等方法实现关联查询。

问题详解:

GORM支持的关联查询

  1. BelongsTo:属于关系
  2. HasOne:一对一关系
  3. HasMany:一对多关系
  4. ManyToMany:多对多关系

一对一关系例子

1.定义User 和 Profile两个模型

type User struct {
    ID      uint   `gorm:"primaryKey"`
    Name    string `gorm:"not null"`
    Email   string `gorm:"unique;not null"`
    // user 关联Profile,一对一关系,代表一个用户有一个,个人描述信息
    Profile Profile
}

type Profile struct {
    ID        uint   `gorm:"primaryKey"`
    // 存储主表的用户id
    UserID    uint   `gorm:"unique;not null"`
    Bio       string `gorm:"not null"`
    Address   string `gorm:"not null"`
}

2.关联查询

var user User
// 根据id查询用户,这里使用Preload预加载Profile个人信息
result := db.Preload("Profile").First(&user, id)

if result.Error != nil {
    // 处理错误
}

// user.Profile 包含了关联查询结果

详情,请参考GORM关联查询教程