我正在尝试使用“查找全部”中的“包含”功能来渴望在单个查询中加载我需要的数据。我的问题是所有包含的内容都是 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 似乎已经完成了大部分事情!但仍然在一些事情上挣扎。
欢迎提出见解!
干杯
最佳答案
根据您的问题,不可能将 where 子句与 LEFT OUTER JOIN 一起使用。 为此,您必须编写 SQL 查询来列出所有公共(public)匹配,并了解成员已经建立了关联的哪些匹配。
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);
});
关于node.js - NodeJS Sequelize 和 FindAll 以及 Include 和约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19050248/