node.js - 如何在 Sequelize 中对两个不同的条件执行嵌套查询?
问题描述
这是我的情况。
我正在构建一个系统,其中您有创建员工的用户(将他们视为管理员)并为每个员工创建绩效报告。用户只能查看由同一公司的用户创建的员工。但是,另一家公司可以使用搜索字段为其他公司的员工创建报告。为该员工创建报告后,他们可以在员工列表中查看该员工,如果该报告不存在,他们就不会在该列表中看到它。
注:型号名称有所改变,但具有相同的特性
我试图有一个端点,它根据以下两种情况之一返回所有员工:
- 返回由用户创建的所有员工,其公司与发起请求的用户属于同一公司。
- 返回具有关联报告的所有员工(如果他们与创建员工的用户不属于同一公司)并且该报告是由与发起请求的用户来自同一公司的用户创建的。
这是一个简短的 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
});
}
解决方案
推荐阅读
- javascript - 从 API 拉取的函数继续运行
- javascript - 如何通过节点js中的键从表单输入数组值中获取数据
- excel - 尝试使用 vb.net 访问 Excel 时出现“无法加载文件或程序集”
- amazon-web-services - 是否可以使用 Athena 删除记录?
- windows - 编译没有 kernel32.lib 的 c 程序时出现链接错误
- postgresql - 如何在 postgres 中查询并发事件,即使用情况?
- c++ - 在自定义容器上使用范围算法
- node.js - 无法在 Electron 中加载预加载脚本,但绝对路径正确
- linux - 如何允许应用声明“https”方案 URI?(即如何从 https URL 打开桌面应用程序?)
- node.js - 在节点 js 中每隔 10、20、30、40、50、60 分钟运行一次 cron 作业