我遇到了一个一直困扰着的问题,但无济于事-本质上与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`);
这就是我想象的工作方式: (相反,它将在联接上创建AND ( `C`.`columnName` = '$B.columnName$'))
的原始查询(对于AB / C,为2个原始查询) arg是一个字符串)。尝试过sequelize.col
,sequelize.where(sequelize.col...
等。)
A.findOne({
where: { id: myId },
include: [{
model: B,
include: [{
model: C,
where: { $C.c_columnName$: $B.b_columnName$ }
}]
}]
});
答案 0 :(得分:0)
使用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',
},
}
},
},
});