我不知道如何按我包含的模型中的列进行排序。 但我什至没有在属性中返回该字段。 如果可能的话,我只想按它订购。 或者我可以将其退回而不使用,只要我可以按它排序即可。
const users = await db.User.findAll({
raw: true,
attributes: [
'id',
'first_name',
'last_name',
'email',
'Permission.type'
],
include: [
{
model: db.Permission,
where: { id: { [Op.lte]: 2 } },
attributes: [],
order: [[{ model: db.Permission }, 'id', 'DESC']]
}
]
});
在
include
块中,order
块现在不执行任何操作。 但我的权限模型中有一个名为 id
的属性,我想根据它对所有结果进行排序。 如果有必要,我可以将 Permission.id
添加到我的 attributes
中。 但我试过了,还是不行。
只需将
order
选项从 include
移至主选项:
const users = await db.User.findAll({
raw: true,
attributes: [
'id',
'first_name',
'last_name',
'email',
'Permission.type'
],
include: [
{
model: db.Permission,
where: { id: { [Op.lte]: 2 } },
attributes: []
}
],
order: [[{ model: db.Permission }, 'id', 'DESC']]
});
也许您应该在
id
属性中指示 include
。
我有一个非常相似的情况,很高兴找到这篇文章。然而,答案似乎对我不起作用。我的查询如下所示:
const favSpaces = await FavoriteSpace.findAll({
transaction: ctx.transaction,
attributes: ['uid', 'space_id', 'is_favorite', 'last_visited'],
include: [
{
model: Space,
as: 'space',
attributes: ['key', 'display_name', 'description', 'type'],
},
],
where: {
uid,
is_favorite: true,
},
order: [[{ model: Space }, 'display_name', 'ASC']],
});
当我运行该查询时,我得到:
Error: Unable to find a valid association for model, 'Space'
我做的事情明显是错误的吗? 如果我注释掉
order:
行,查询就可以正常工作。