首页 > 解决方案 > 如何在 Sequelize 中对两个不同的条件执行嵌套查询?

问题描述

这是我的情况。

我正在构建一个系统,其中您有创建员工的用户(将他们视为管理员)并为每个员工创建绩效报告。用户只能查看由同一公司的用户创建的员工。但是,另一家公司可以使用搜索字段为其他公司的员工创建报告。为该员工创建报告后,他们可以在员工列表中查看该员工,如果该报告不存在,他们就不会在该列表中看到它。

注:型号名称有所改变,但具有相同的特性

我试图有一个端点,它根据以下两种情况之一返回所有员工:

  1. 返回由用户创建的所有员工,其公司与发起请求的用户属于同一公司。
  2. 返回具有关联报告的所有员工(如果他们与创建员工的用户不属于同一公司)并且该报告是由与发起请求的用户来自同一公司的用户创建的。

这是一个简短的 ERD,解释了模型之间的关系:

在此处输入图像描述

这是使用嵌套连接的代码:

async function getAll(company) {
  
  return await Employee.findAll({
    where: {
      [Op.or]: [
        {
          '$User.company$': { [Op.eq]: company }
        },
        {
          '$Report.User.company$': { [Op.eq]: company }
        }
      ]
    },
    include: [
      {
        attributes: [],
        model: User.scope('withoutPassword'),
      },
      {
        attributes: [],
        model: Report,
        include: {
          attributes: [],
          model: User.scope('withoutPassword'),
        }
      }
    ]
  })
    .then(employees => {
      return employees
    });
}

标签: node.jsormsequelize.jsassociations

解决方案


推荐阅读