2

我正在尝试使用 Find all 中的 Include 功能以在单个查询中加载我需要的数据。我的问题是所有包含都是左外连接......这很好,但我没有看到向左外连接添加额外约束的方法。

我的查询看起来像:

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

但这似乎不受支持......至少我编写语法的方式是这样。我无法将该约束添加到 LEFT OUTER JOIN 的约束中……向 WHERE 子句添加相同的约束不起作用……因为这只会给我与成员关联的匹配项。我想要所有公共比赛的列表,并知道会员已经建立了哪些协会。

可以做到吗?Sequelize 似乎完成了大部分工作!但仍然在为一些事情苦苦挣扎。

欢迎提供见解!

干杯

4

2 回答 2

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);
});

在 Sequelize 中执行原始 SQL 查询

于 2014-03-05T16:36:23.577 回答
1

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

如果没有where:指定子句,则默认为false. 但是,它会在设置truea 时where:设置。

您可以显式关闭它以获取findAll().

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

于 2015-12-17T19:11:18.863 回答