Sequelize.js Sequelize:限制和排序急切加载的关联

Sequelize.js Sequelize:限制和排序急切加载的关联,sequelize.js,sequelize-cli,Sequelize.js,Sequelize Cli,我有四张桌子。用户、文件室、消息和联接表RoomUsers I want to write a query that: 1. Return a list of rooms 2. Each room with the last message sent 3. Rooms ordered by the message last sent 问题是我无法同时限制急切加载的嵌套关联和按嵌套关联排序 Users.hasMany(Messages) / Message.belongsTo(Users)

我有四张桌子。用户、文件室、消息和联接表RoomUsers

I want to write a query that:
 1. Return a list of rooms
 2. Each room with the last message sent
 3. Rooms ordered by the message last sent
问题是我无法同时限制急切加载的嵌套关联和按嵌套关联排序

Users.hasMany(Messages) / Message.belongsTo(Users)
Rooms.hasMany(Messages) / Message.belongsTo(Rooms)

RoomUser.belongsTo(Users) / Users.belongsToMany(Rooms, {through: RoomUsers})
RoomUser.belongsTo(Rooms) / Rooms.belongsToMany(Users, {through: RoomUsers})
不确定这是否有区别,但我使用的是迁移与Sequelize的编码关联(aka
User.hasMany(Messages)

我的模型/迁移代码可以在这里找到:(注意,为了可读性,我在下面的示例中做了一些大小写更改)

我尝试过的

查询房间表

当我试图限制嵌套关联(消息)并按最后一条消息订购房间时,我得到一个错误:

Executing (default): SELECT "room"."id", "room"."name" FROM "rooms" AS "room" ORDER BY "messages"."id" DESC;
(node:23360) UnhandledPromiseRejectionWarning: SequelizeDatabaseError: missing FROM-clause entry for table "messages"
我尝试了不同的属性,例如,
子查询:false
到:{}
必需:true
。到目前为止还没有任何进展


尝试查询联接表的结果也有相同的限制。

我认为您需要使用Sequelize.literal()。使用它,我们可以轻松访问messages.id并获得结果

return await Room.findAll({ 
include: [
    {
      model: Message,
      offset:0,
      limit: 1, // YOU CAN LIMIT
      include: [
        {
          model: User,
        },
      ],
    },
  ],
 order: [[Sequelize.literal(`messages.id`), `DESC`]],
 subQuery:false
});

我试了一下,但不幸的是它不起作用。我仍然收到与上面发布的相同的错误消息。你的代码和我的代码都可以不受限制地工作,但是一旦我添加了限制,我就会收到发布的错误消息。我认为这是续集中限制和顺序结合的问题。请打开链接并签入此链接,您将在包含中发现复制:false。我刚刚尝试了该标志,但不幸的是它不起作用。在尝试执行“限制”和“顺序”时,我仍然收到相同的错误消息。我在网上查看了一下,我认为这个问题可能与多对多关系(房间对用户)有关。
return await Room.findAll({ 
include: [
    {
      model: Message,
      offset:0,
      limit: 1, // YOU CAN LIMIT
      include: [
        {
          model: User,
        },
      ],
    },
  ],
 order: [[Sequelize.literal(`messages.id`), `DESC`]],
 subQuery:false
});