【问题标题】:Get association objects with order from JoinTable using GORM使用 GORM 从 JoinTable 获取具有顺序的关联对象
【发布时间】:2021-02-24 17:50:07
【问题描述】:

我有两个模型

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
}

我想将练习预加载给持有人,但按联接表中的“订单”参数排序。 例如我有

holders := []models.Holder{}
database.Preload("Exercises").Find(&holders)

它为我提供了嵌入式练习,但顺序随机。 有没有办法在连接表中按顺序获取练习?

【问题讨论】:

    标签: postgresql go join go-gorm


    【解决方案1】:

    我尝试了对我来说似乎很明显的方法,即使用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 将加载分成两个查询,一个是连接表,另一个是连接表。我发现的一种解决方法是,没有错误检查:

    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)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-01
      • 2021-09-22
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 2014-10-29
      • 1970-01-01
      相关资源
      最近更新 更多