【问题标题】:Order by in nested eager loading in sequelize not working在 sequelize 中的嵌套急切加载中排序不起作用
【发布时间】:2016-10-23 11:47:17
【问题描述】:

我有四个模型 Tehsil、Ilr、Patwar 和 Villages。 他们的关联是

Tehsil -> 1:m -> Ilr -> 1:m -> Patwar -> 1:m -> 村庄

我想对我的所有四个模型应用 order by。

查询:

var tehsilQuery = {
    include: [{
        model: Ilr,
        as: 'GirdawariKanoongo',
        include: [{
            model: Patwar,
            as: 'GirdawariPatwar',
            include: [{
                model: Villages,
                as: 'GirdawariVillages',
            }]
        }]
    }],
    order: [
        ['tehsil_name', 'ASC'],
        [ {model: Ilr, as: 'GirdawariKanoongo'}, 'kanoongo_name', 'ASC'],
        [ {model: Patwar, as: 'GirdawariPatwar'}, 'patwar_area', 'ASC'],
        [ {model: Villages, as: 'GirdawariVillages'}, 'village_name', 'ASC'],
    ]
};
return Tehsils.findAll(tehsilQuery);

[Error: 'girdawari_patwar' in order / group clause is not valid association]

如果我从 order 中删除 PatwarVillages(lat 两个模型),则 order by 有效。

【问题讨论】:

  • 错误中关联名称中的下划线表明 Sequelize 正在尝试自动生成关联名称,但我不确定为什么。您可以在设置关联的位置发布代码吗?
  • @TomJardine-McNamara 看我解决了,谢谢你的时间。

标签: node.js sequelize.js eager-loading


【解决方案1】:

另一个嵌套排序的工作示例:

order: [  
  [ { model: chapterModel, as: 'Chapters' }, 'createdAt', 'ASC'], 
  [ { model: chapterModel, as: 'Chapters' }, 
    { model: partModel, as: 'Parts' }, 'createdAt', 'ASC'] 
],

part 和 chapter 有 M:1 的关系。

【讨论】:

    【解决方案2】:

    我们的场景是两个嵌套的include 语句,其中最里面的嵌套没有正确排序。通过在findAll 的最高级别应用ordering,我们能够成功返回有序对象。

    我们surveySet.findAll的模型关系如下:

    • suveySet 有许多调查
    • 调查属于许多问题

      order: [  
          [ { model: survey, as: 'survey' }, 'subjectId', 'ASC'], 
          [ { model: survey, as: 'survey' }, 
            { model: question, as: 'question' }, 'id', 'ASC'] 
      ]
      

    【讨论】:

      【解决方案3】:

      我解决了。 这是order 的外观:

      order: [
              'tehsil_name',
              'GirdawariKanoongo.kanoongo_name',
              'GirdawariKanoongo.GirdawariPatwar.patwar_area',
              'GirdawariKanoongo.GirdawariPatwar.GirdawariVillages.village_name' 
             ]
      

      我所要做的就是:使用as 关联表格并将它们链接起来,然后是column_nameorder 应该适用于其中。

      【讨论】:

        【解决方案4】:

        对于任何想知道如何使用对象样式定义来实现它的人,这就是它的解决方法。 您可以在Sequelize documentation找到更多关于订购的信息。

        order: [
            ['tehsil_name', 'ASC'],
            [ {model: Ilr, as: 'GirdawariKanoongo'}, 'kanoongo_name', 'ASC'],
            [ {model: Ilr, as: 'GirdawariKanoongo'}, {model: Patwar, as: 'GirdawariPatwar'}, 'patwar_area', 'ASC'],
            [ {model: Ilr, as: 'GirdawariKanoongo'}, {model: Patwar, as: 'GirdawariPatwar'}, {model: Villages, as: 'GirdawariVillages'}, 'village_name', 'ASC'],
        ]
        

        【讨论】:

          猜你喜欢
          • 2018-07-28
          • 2016-10-14
          • 2017-03-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-25
          • 2010-10-25
          • 2016-12-28
          • 1970-01-01
          相关资源
          最近更新 更多