我正在尝试使用Find all to Eager中的Include功能在单个查询中加载我需要的数据。我的问题是所有包含都是LEFT OUTER JOIN ...这很好,但我没有看到一种方法来为LEFT OUTER JOIN添加额外的约束。
我的查询看起来像:
Matches.findAll(
{where: ["match.isPublished = ?", true],
include: [RoundMaps,
Locations,
{model: MemberMaps, as: "MemberMaps", where: ["memberMaps.memberUUID = ?", authenticatedUser.uuid]}]})
但这似乎并不支持......至少我编写语法的方式。我无法将该约束添加到LEFT OUTER JOIN上的约束...向WHERE子句添加相同的约束不起作用...因为这只给了我与成员关联的匹配。我想要所有公共匹配的列表,并知道该成员已经建立了关联的那些。
可以吗? Sequelize似乎已经完成了大部分工作!但仍然在努力解决一些问题。
欢迎见解!
干杯
答案 0 :(得分:1)
根据您的问题,使用带有LEFT OUTER JOIN的where子句是不可能的。 为此,您必须将SQL查询写入所有公共匹配的列表,并知道该成员已经建立了关联的那些。
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);
});
答案 1 :(得分:1)
INCLUDE上有一个选项,用于指定连接是内部还是外部:include.require = boolean
如果未指定where:
子句,则默认为false
。但是,当设置true
时,它会设置为where:
。
您可以明确地将其关闭以获取findAll()
的所有结果。
不幸的是,我见过的唯一例子是代码库本身,但它是: sequelize /测试/集成/协会/所属到many.test.js#L167