假设我们有两个表,一个是'users'表,另一个是'addresses'表。'users'表中存储着一些用户的信息,而'addresses'表中存储着这些用户的地址信息。

使用'joins'和'preload'联合查询这两个表的数据,可以使用以下代码:

// 定义结构体
type User struct {
    ID        uint
    Name      string
    Addresses []Address `gorm:"foreignKey:UserID"
}

type Address struct {
    ID      uint
    UserID  uint
    Country string
    City    string
    Street  string
}

// 查询数据
var users []User
db.Joins("left join addresses on users.id = addresses.user_id").Preload("Addresses").Find(&users)

在上面的代码中,我们使用了'Joins'方法指定了'users'表与'addresses'表的关联关系,使用了'Preload'方法将'addresses'表中的数据预加载到查询结果中。

在结构体中,我们使用了'gorm:"foreignKey:UserID"'来指定'User'结构体与'Address'结构体之间的关联关系。这样,当我们查询'User'数据时,'GORM'就会自动将相应的'Address'数据预加载到查询结果中。

需要注意的是,如果'joins'语句中的表名与'preload'语句中的表名不一致,需要在'preload'语句中指定表名。例如,如果'joins'语句中使用的是别名'a',则需要在'preload'语句中指定表名为'a',如下所示:

var users []User
db.Joins("left join addresses a on users.id = a.user_id").Preload("a.Addresses").Find(&users)

这样,'GORM'就会将'a'表中的数据预加载到查询结果中。

GORM Preload 和 Joins 联合使用:指定关联表

原文地址: https://www.cveoy.top/t/topic/mQph 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录