sequelize - 从包含的模型中按列排序

问题描述 投票:0回答:2

我不知道如何按我包含的模型中的列进行排序。 但我什至没有在属性中返回该字段。 如果可能的话,我只想按它订购。 或者我可以将其退回而不使用,只要我可以按它排序即可。

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
中。 但我试过了,还是不行。

sequelize.js sql-order-by
2个回答
10
投票

只需将

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


0
投票

我有一个非常相似的情况,很高兴找到这篇文章。然而,答案似乎对我不起作用。我的查询如下所示:

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:
行,查询就可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.