Sequelize 指定连接的顺序
Sequelize specify the order of joins
我有一个复杂的连接,其中包含的 table 的顺序很重要。有没有办法让 sequelize 在它创建的 sql 中正确地排序连接?
我有 3 table:汽车,driver,技能
一辆车有很多driver人有很多技能
我想获得 driver 的列表,并在其中包括他们的汽车信息,以及他们拥有的与该汽车相关的任何技能。
我在 sequelize 中的查询是:
driver.findAndCountAll({ limit: 5, include: [{
model: car,
required: true,
duplicating: false,
}, {
model: skill,
where: { model: { $col: 'car.model' } },
required: true,
duplicating: false,
}]);
这会产生以下结果SQL
SELECT count(DISTINCT("driver"."id")) AS "count" FROM "driver" AS "driver"
INNER JOIN "skill" AS "skill" ON "driver"."id" = "skill"."driverId"
AND "skill"."model" = "car"."model"
INNER JOIN "car" AS "car" ON "driver"."carId" = "car"."id"
LIMIT 5;
这是失败的,因为对 car.model 的引用出现在汽车 table 加入之前。
如果我将 SQL 复制并粘贴到 psql 并交换连接的顺序,SQL 执行得很好。
有没有办法让 sequelize 修复顺序。
(我尝试更改包含的顺序,但没有成功,它似乎是按相反的字母顺序包含它们)
事实证明,sequelize 确实遵循包含的顺序。我没有注意到我们的代码中的转换正在改变包含的顺序。
我有一个复杂的连接,其中包含的 table 的顺序很重要。有没有办法让 sequelize 在它创建的 sql 中正确地排序连接?
我有 3 table:汽车,driver,技能 一辆车有很多driver人有很多技能
我想获得 driver 的列表,并在其中包括他们的汽车信息,以及他们拥有的与该汽车相关的任何技能。
我在 sequelize 中的查询是:
driver.findAndCountAll({ limit: 5, include: [{
model: car,
required: true,
duplicating: false,
}, {
model: skill,
where: { model: { $col: 'car.model' } },
required: true,
duplicating: false,
}]);
这会产生以下结果SQL
SELECT count(DISTINCT("driver"."id")) AS "count" FROM "driver" AS "driver"
INNER JOIN "skill" AS "skill" ON "driver"."id" = "skill"."driverId"
AND "skill"."model" = "car"."model"
INNER JOIN "car" AS "car" ON "driver"."carId" = "car"."id"
LIMIT 5;
这是失败的,因为对 car.model 的引用出现在汽车 table 加入之前。 如果我将 SQL 复制并粘贴到 psql 并交换连接的顺序,SQL 执行得很好。
有没有办法让 sequelize 修复顺序。 (我尝试更改包含的顺序,但没有成功,它似乎是按相反的字母顺序包含它们)
事实证明,sequelize 确实遵循包含的顺序。我没有注意到我们的代码中的转换正在改变包含的顺序。