包含和约束的NodeJS Sequelize和FindAll

我正在尝试使用查找全部快速加载我需要在单个查询中的数据包含function。 我的问题是,所有的包括是左外部连接…这是好的,但我没有看到一种方式来添加额外的约束,左外部连接。

我的查询看起来像这样:

Matches.findAll( {where: ["match.isPublished = ?", true], include: [RoundMaps, Locations, {model: MemberMaps, as: "MemberMaps", where: ["memberMaps.memberUUID = ?", authenticatedUser.uuid]}]}) 

但是这似乎不被支持…至less我写的语法的方式。 我不能将约束添加到左外部连接上的约束…将相同的约束添加到WHERE子句不起作用…因为这只给出了与成员关联的匹配。 我想要所有公开比赛的名单,并且知道哪些成员已经build立了联盟。

可以这样做吗? 续集似乎正在完成大部分事情! 但仍然在一些事情上挣扎。

洞察欢迎!

干杯

根据你的问题,这是不可能使用LEFT OUTER JOIN的where子句。 为此,您必须将SQL查询写入所有公共匹配列表,并知道该成员已经build立了关联。

 sequelize.query('SELECT * FROM "Matches" LEFT OUTER JOIN "RoundMaps" ON "Matches".id = "RoundMaps".match_id LEFT OUTER JOIN "Locations" ON "Matches".id = "Locations".match_id LEFT OUTER JOIN (SELECT * FROM "MemberMaps" WHERE "MemberMaps".memberUUID = ?) AS "MemberMaps" ON "Matches".id = "MemberMaps".match_id WHERE "Matches".isPublished = ?', null, { raw: true }, [memberUUID,true ]).success(function(myTableRows) { console.log(myTableRows); res.send(myTableRows); }); 

在Sequelize中执行原始SQL查询

INCLUDE上有一个选项,指定连接是内部的还是外部的: include.require = boolean

如果没有指定where:子句,则默认为false 。 但是,当设置where:时,它将被设置为true

您可以明确地closures它来获取findAll()所有结果。

不幸的是,我所见过的唯一例子是在代码库本身,但在这里是:sequelize / test / integration / associations / belongs-to-many.test.js#L167