Sequelize.js Sequelize:限制和排序急切加载的关联
我有四张桌子。用户、文件室、消息和联接表RoomUsersSequelize.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)
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的编码关联(akaUser.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
});