我有一个复杂的连接,其中包含的表的顺序很重要。有没有办法让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来修复排序。 (我尝试改变包含的顺序,但没有运气,似乎是按逆向字母顺序包含它们)
答案 0 :(得分:0)
事实证明,sequelize确实遵守了包含的顺序。我没有注意到我们的代码中的变换正在改变包含的顺序。