Sequelize [Op.and] 不与 M:N 关联一起工作

Sequelize [Op.and] not working with M:N association

我有两个模型

通过 unit_filter table

与 M:N 关联相关的单位和过滤器
 this.belongsToMany(Unit, {
        through: "unit_filter",
        as: "units",
      });

  this.belongsToMany(Filter, {
        through: 'unit_filter',
        as: 'filters',
      });

目标是获取具有超过 1 个关联过滤器和条件的单元。

let result = await Unit.findAll({
          include: [
            {
              model: Filter,
              where: {
                id: {
                  [Op.and] : [2,252,4,80]
                }
              },
              as: 'filters',
            },
          ],
        });

只有当数组中只有一个没有任何意义的 id 时,上面的方法才有效。

序列化文档状态

  Post.findAll({
      where: {
       [Op.and]: [{ a: 5 }, { b: 6 }],            // (a = 5) AND (b = 6)
      }
    })

所以我的代码理论上应该可以工作。我也试过

where: {
   [Op.and] : [{id:2},{id:252},{id:4},{id:80}]
}

这导致从数据库中获取所有项目。在这种情况下,它甚至不关心 where 条件。

如果有人指出正确的方向,将会有很大帮助。

您需要将 Sequelize.literalwhere 选项中的子查询一起使用,以便过滤具有多个过滤器的单元,因为只需指示多个过滤器 ID,您将获得具有以下之一的单元指定过滤器(从 1 到 N)。

let result = await Unit.findAll({
   where: Sequelize.where(
           Sequelize.literal('(SELECT COUNT(*) FROM unit_filter as uf WHERE uf.unit_id=unit.id AND uf.filter_id in ($filter_ids))'),
           Op.gt,
           '1'),
   bind: {
     filter_ids: [2,252,4,80]
   }
});