首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用GORM从JoinTable获取具有订单的关联对象

使用GORM从JoinTable获取具有订单的关联对象
EN

Stack Overflow用户
提问于 2020-11-13 01:24:15
回答 1查看 39关注 0票数 1

我有两个型号

代码语言:javascript
复制
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"`
}

和连接表

代码语言:javascript
复制
type HolderExercisesNew struct {
    OwnModel
    HolderID   int64 `json:"holder_id"`
    ExerciseID int64 `json:"exercise_id"`
    Order      int64 `json:"order"` // my custom param for ordering
}

我想要预先加载练习到持有者,但在连接表中按"Order“参数排序。例如,我有

代码语言:javascript
复制
holders := []models.Holder{}
database.Preload("Exercises").Find(&holders)

它为我提供了嵌入式练习,但顺序是随机的。有没有办法在join表中按顺序设置练习?

EN

回答 1

Stack Overflow用户

发布于 2020-12-16 22:31:35

我尝试了对我来说显而易见的方法,即使用Custom Preloading SQL

代码语言:javascript
复制
holders := []models.Holder{}
database.
    Preload("Exercises", func(tx *gorm.DB) *gorm.DB {
        return tx.Order("holder_exercises_new.order ASC")
    }).
    Find(&holders)

但这并不起作用,因为GORM将加载分离到两个查询中,一个是连接表,另一个是连接表。我发现的一个解决方法是,sans错误检查:

代码语言:javascript
复制
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)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64808745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档