Sequelize指定连接的顺序

时间:2017-08-27 08:59:55

标签: join sequelize.js psql

我有一个复杂的连接,其中包含的表的顺序很重要。有没有办法让sequelize在它创建的sql中正确地命令连接?

我有3张桌子:汽车,司机,技能 一辆车有很多有很多技能的车手

我想获得一份司机列表,并在其中包含他们的汽车信息,以及他们与该汽车相关的任何技能。

我在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的引用在car表连接之前到来。 如果我将SQL复制并粘贴到psql中并交换连接的顺序,则SQL执行正常。

有没有办法让sequelize来修复排序。 (我尝试改变包含的顺序,但没有运气,似乎是按逆向字母顺序包含它们)

1 个答案:

答案 0 :(得分:0)

事实证明,sequelize确实遵守了包含的顺序。我没有注意到我们的代码中的变换正在改变包含的顺序。