type User struct { gorm.Model Username string Orders []Order }
type Order struct { gorm.Model UserID uint Price float64 }
// 查找 user 时预加载相关 Order 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
var dog []Dog Db.Preload("Girls").Find(&dog) // 查询dog的情况,同时可以查询到girl的状态
如果只需要Girls的切片
1 2
var dog []Dog Db.Model(&Dog).Association("Girls").Find(&dog)//可以查询出带有Girls字段的值
如果想要把Girls中的Dog也显现出来
1 2 3
// 使用preload预加载 var dog []Dog Db.Model(&Dog).Preload("dog").Association("Girls").Find(&dog)
也可以使用自定义语句等等………
维护中间表的关系
1 2 3 4 5 6
var d Dog var g1, g2 Girl Db.Model(&d).Association("Girl").Append( &g1 , &g2 ) Db.Model(&d).Association("Girl").Delete( &g1) Db.Model(&d).Association("Girl").Replace( &g1) Db.Model(&d).Association("Girl").Clear()