我有一套复杂的相关模型。这些模型使用连接表进行关联,每个连接表都有一个名为“order”的属性。我需要能够查询父模型'页面',包括相关的模型,并按字段'顺序'排序这些关联。
以下内容对结果的排序顺序没有影响:
db.Page.findAll({
include: [{
model: db.Gallery,
order: ['order', 'DESC'],
include: [{
model: db.Artwork,
order: ['order', 'DESC']
}]
}],
})
6条答案
按热度按时间r6l8ljro1#
我相信你可以做到:
也有一堆不同的方式,或你可以做的事情时订购。阅读更多: www.example.com
osh3o9ms2#
如果你也使用'as',假设你想按'createdDate'排序,查询看起来像这样:
xuo3flqw3#
pgpifvop4#
这对我很有效:
inn6fuwd5#
为了完整起见,另一个同样有效的方法是使用
sequelize.col
,如下所示:在这个特定的例子中,它比https://stackoverflow.com/a/30017078/895245的数组(它更显式地使用现有的Js类而不是魔术字符串)稍差,但似乎在大多数情况下,除了
order:
,.col
是可以接受的,但数组不是,所以记住它也是很好的。当你还需要在嵌套包含中使用
limit:
时,还有一些额外的困难需要克服:当仅限制顶层时,似乎需要
subQuery: false
。例如:ldioqlga6#
我不需要填充根模型的order属性(在本例中是db。Page)。
相反,我向嵌套模型添加了顺序。在该示例中,db.艺术品
但是,Sequelize的order属性不能是字符串数组,其中每个字符串都是列名,最后一个字符串是方向。例如:
相反,它必须由一个数组组成,其中每个元素都是由两个元素组成的另一个数组:
例如:
因此,对我有效的方法是对db的内容进行排序。列
order
在后代方向上的插图为:我从another answer得到了这个答案,我在SO上找到了这个答案。