在 sequelize 中的嵌套预加载中排序不起作用
Order by in nested eager loading in sequelize not working
我有四个模型 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
.
中删除 Patwar
和 Villages
(lat two model),order by 会起作用
我解决了。
这是 order
的样子:
order: [
'tehsil_name',
'GirdawariKanoongo.kanoongo_name',
'GirdawariKanoongo.GirdawariPatwar.patwar_area',
'GirdawariKanoongo.GirdawariPatwar.GirdawariVillages.village_name'
]
我所要做的就是:使用 as
与 table 关联并将它们链接起来,然后是 column_name
应该应用的 column_name
。
嵌套排序的另一个工作示例:
order: [
[ { model: chapterModel, as: 'Chapters' }, 'createdAt', 'ASC'],
[ { model: chapterModel, as: 'Chapters' },
{ model: partModel, as: 'Parts' }, 'createdAt', 'ASC']
],
其中部分和章节有 M:1 关系。
我们的场景是两个嵌套的 include
语句,其中最内层的嵌套顺序不正确。通过在 findAll
的最高级别应用 ordering
我们能够成功地 return 有序对象。
我们的 surveySet.findAll
模型关系如下:
- suveySet 有许多调查
调查属于许多问题
order: [
[ { model: survey, as: 'survey' }, 'subjectId', 'ASC'],
[ { model: survey, as: 'survey' },
{ model: question, as: 'question' }, 'id', 'ASC']
]
对于任何想知道如何使用对象样式定义来实现的人,这就是解决方法。
您可以在 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'],
]
我有四个模型 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
.
Patwar
和 Villages
(lat two model),order by 会起作用
我解决了。
这是 order
的样子:
order: [
'tehsil_name',
'GirdawariKanoongo.kanoongo_name',
'GirdawariKanoongo.GirdawariPatwar.patwar_area',
'GirdawariKanoongo.GirdawariPatwar.GirdawariVillages.village_name'
]
我所要做的就是:使用 as
与 table 关联并将它们链接起来,然后是 column_name
应该应用的 column_name
。
嵌套排序的另一个工作示例:
order: [
[ { model: chapterModel, as: 'Chapters' }, 'createdAt', 'ASC'],
[ { model: chapterModel, as: 'Chapters' },
{ model: partModel, as: 'Parts' }, 'createdAt', 'ASC']
],
其中部分和章节有 M:1 关系。
我们的场景是两个嵌套的 include
语句,其中最内层的嵌套顺序不正确。通过在 findAll
的最高级别应用 ordering
我们能够成功地 return 有序对象。
我们的 surveySet.findAll
模型关系如下:
- suveySet 有许多调查
调查属于许多问题
order: [ [ { model: survey, as: 'survey' }, 'subjectId', 'ASC'], [ { model: survey, as: 'survey' }, { model: question, as: 'question' }, 'id', 'ASC'] ]
对于任何想知道如何使用对象样式定义来实现的人,这就是解决方法。 您可以在 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'],
]