我遇到了一个一直困扰我的问题,但无济于事 - 看起来与 Where condition for joined table in Sequelize ORM 的性质相似,除了我想查询以前的连接。也许代码会解释我的问题。很高兴提供任何额外的信息。
型号:
A.hasMany(B);
B.belongsTo(A);
B.hasMany(C);
C.belongsTo(B);
这就是我希望能够通过 Sequelize 实现的目标:
SELECT *
FROM `A`AS `A`
LEFT OUTER JOIN `B` AS `B` ON `A`.`id` = `B`.`a_id`
LEFT OUTER JOIN `C` AS `B->C` ON `B`.`id` = `B->C`.`b_id`
AND (`B`.`b_columnName` = `B->C`.`c_columnName`);
这就是我想象的工作方式: (相反,它将创建一个原始查询(2 个原始查询,用于 A-B/C),在连接上使用
AND ( `C`.`columnName` = '$B.columnName$'))
(第二个参数是一个字符串)。尝试过 sequelize.col
、 sequelize.where(sequelize.col...
等。)A.findOne({
where: { id: myId },
include: [{
model: B,
include: [{
model: C,
where: { $C.c_columnName$: $B.b_columnName$ }
}]
}]
});
最佳答案
使用 Op.col
查询运算符来查找与查询中的其他列匹配的列。如果您只加入一个表,您可以传递一个对象而不是数组以使其更简洁。
const Op = Sequelize.Op;
const result = await A.findOne({
include: {
model: B,
include: {
model: C,
where: {
c_columnName: {
[Op.col]: 'B.b_columnName',
},
}
},
},
});
关于javascript - 可以在 Sequelize 中嵌套包含的 WHERE 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56698348/