GORM Preload 和 Joins 联合使用:指定关联表
假设我们有两个表,一个是'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'表中的数据预加载到查询结果中。
原文地址: https://www.cveoy.top/t/topic/mQph 著作权归作者所有。请勿转载和采集!