GORM是一个Go语言的ORM库,可以方便地进行数据库操作。在GORM中,使用Preload方法可以进行多表联合查询。
假设我们有两个模型:User和Order。User模型拥有多个Order,我们需要通过UserID来查找某个User及其所有的Order。
首先,定义模型:
type User struct {
ID uint `gorm:"primary_key"`
Name string
Orders []Order
}
type Order struct {
ID uint `gorm:"primary_key"`
UserID uint
OrderName string
}
然后,在进行查询时,使用Preload方法:
var user User
// 查询ID为1的用户,并将其关联的订单一起加载出来
db.Preload("Orders").First(&user, 1)
// 打印该用户信息以及其所有订单信息
fmt.Println(user)
for _, order := range user.Orders {
fmt.Println(order)
}
在上述代码中,我们使用了Preload方法来加载关联数据。”Orders”参数表示要加载User模型中的Orders属性。
执行以上代码后,会输出该用户信息以及其所有订单信息。这样就完成了多表联合查询。
注意事项:
- Preload方法只能用于One-To-Many、Many-To-One和Many-To-Many关系。
- 在使用Preload方法时,如果没有设置外键,则无法正确预加载相关数据。
- 如果需要对预加载出来的数据进行过滤或排序等操作,可以在Preload之后链式调用Where、Order等方法。
- 在实际开发中,如果需要进行复杂的多表联合查询,可以使用GORM提供的Raw SQL功能。




