预加载

GORM 允许使用 Preload 在其他 SQL 中进行预加载关系,例如:

// Preload Orders when find users
db.Preload("Orders").Find(&users)
// SELECT * FROM users;
// SELECT * FROM orders WHERE user_id IN (1,2,3,4);

db.Preload("Orders").Preload("Profile").Preload("Role").Find(&users)
// SELECT * FROM users;
// SELECT * FROM orders WHERE user_id IN (1,2,3,4); // has many
// SELECT * FROM profiles WHERE user_id IN (1,2,3,4); // has one
// SELECT * FROM roles WHERE id IN (4,5,6); // belongs to

加入预加载

Preload 在单独的查询中加载关联数据, Join Preload 将使用左连接加载关联数据,例如:

db.Joins("Company").Joins("Manager").Joins("Account").First(&user, 1)
db.Joins("Company").Joins("Manager").Joins("Account").First(&user, "users.name = ?", "jinzhu")
db.Joins("Company").Joins("Manager").Joins("Account").Find(&users, "users.id IN ?", []int{1,2,3,4,5})

预加载全部

clause.Associations 在创建/更新时可以与 Preload 类似地与 Select 一起使用,您可以使用它来 Preload 所有关联,例如:

clause.Associations 不会预加载嵌套关联,但你可以将它与嵌套预加加载一起使用,例如:

条件预加载

GORM 允许预加载与条件关联。核心目的是在查询主模型数据时,​​同时加载其关联数据,但只加载符合特定条件的关联数据​​。

自定义预加载SQL

可以通过传入 func(db *gorm.DB) *gorm.DB 来自定义预加载 SQL,例如:

嵌套预加载

GORM 支持嵌套预加载,例如:

最后更新于