可能在Sequelize中嵌套嵌套包含在何处?

时间:2019-06-21 06:55:41

标签: javascript sql orm sequelize.js

我遇到了一个一直困扰着的问题,但无济于事-本质上与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.colsequelize.where(sequelize.col...等。)

A.findOne({
    where: { id: myId },
    include: [{
        model: B,
        include: [{
            model: C,
            where: { $C.c_columnName$: $B.b_columnName$ }
        }]
    }]
});

1 个答案:

答案 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',
        },
      }
    },
  },
});