我有两个型号
type Holder struct {
OwnModel
Title string `json:"title"`
Exercises []Exercise `json:"exercises" gorm:"many2many:holder_exercises_new;"`
}
type Exercise struct {
OwnModel
Title string `json:"title"`
}和连接表
type HolderExercisesNew struct {
OwnModel
HolderID int64 `json:"holder_id"`
ExerciseID int64 `json:"exercise_id"`
Order int64 `json:"order"` // my custom param for ordering
}我想要预先加载练习到持有者,但在连接表中按"Order“参数排序。例如,我有
holders := []models.Holder{}
database.Preload("Exercises").Find(&holders)它为我提供了嵌入式练习,但顺序是随机的。有没有办法在join表中按顺序设置练习?
发布于 2020-12-16 22:31:35
我尝试了对我来说显而易见的方法,即使用Custom Preloading SQL
holders := []models.Holder{}
database.
Preload("Exercises", func(tx *gorm.DB) *gorm.DB {
return tx.Order("holder_exercises_new.order ASC")
}).
Find(&holders)但这并不起作用,因为GORM将加载分离到两个查询中,一个是连接表,另一个是连接表。我发现的一个解决方法是,sans错误检查:
holders := []models.Holder{}
database.Find(&holders)
for i := range holders {
database.
Model(&holders[i]).
Order("holder_exercises_new.order ASC").
Association("Exercises").
Find(&holders[i].Exercises)
}https://stackoverflow.com/questions/64808745
复制相似问题