sequelize、mysql 问题求解答!一张表多个关联关系问题。

2021-07-30 17:45:18 +08:00
 yishen0

Worker.hasMany(Worker_task, { foreignKey: 'worker_id' })
Worker_task.belongsTo(Worker, { foreignKey: 'worker_id', targetKey: 'id' })
Worker.hasMany(Worker_task, { foreignKey: 'other_workerid' })
Worker_task.belongsTo(Worker, { foreignKey: 'other_workerid', targetKey: 'id' })

上面是我的数据表关系。worker_task表中worker_id 字段指向worker.id,为一对多关系。

worker_task表中other_workerid字段同样指向worker.id,为一对多关系。

业务简化逻辑

员工、员工任务。员工甲委派任务给员工乙,worker_id就是甲的 id,other_workerid就是乙的 id 。

现在要通过,worker_task 表查询出,worker_id 和 other_workerid 对应的信息。下边是我的 sequelize 查询语句。

// workerId
const data = await Worker_task.findAndCountAll({
  attributes: ['worker_id', 'task_id', 'trust_relation', 'other_workerid'],
  include: [
    // TODO 现在查出来,是 other_workerid 对应的 worker 。我想把 worker_id 和 other_workerid 对应的 worker 记录都查询出来。
    { model: Worker, attributes: ['name'] },
  ],
  where: {
    [Op.or]: [
      {
        worker_id: workerId,
      },
      {
        other_workerid: workerId,
      },
    ],
  },
})

求助 sequelize 语句或者原始 mysql 语句。或者换其他可行的思路也是 ok 的,提前谢谢大家!

3662 次点击
所在节点    Node.js
5 条回复
zoharSoul
2021-07-30 18:54:43 +08:00
```
select * from work_task as t1
left join worker as t2 on t1.worker_id = t2.id or t1.other_worker_id = t2.id
```
512357301
2021-07-30 20:34:42 +08:00
试试这个:

select
t0.*
,t1.name
,t2.name
from work_task t0
left join worker as t1 on t0.other_worker_id = t1.id
left join worker as t2 on t0.worker_id = t2.id
px920906
2021-07-30 20:45:43 +08:00
建立关联的时候加个 alias 试试:
```
Worker.hasMany(Worker_task, { foreignKey: 'worker_id', as: 'worker'})
Worker.hasMany(Worker_task, { foreignKey: 'other_workerid' , as: 'other_worker'})

include: [
{ model: Worker, attributes: ['name'], as: 'worker' },
{ model: Worker, attributes: ['name'], as: 'other_worker' },
]
```
yishen0
2021-07-31 00:52:22 +08:00
@512357301 @zoharSoul 谢谢两位。用三楼的的方法了,mysql 还不太熟。 谢谢!谢谢!🙏
yishen0
2021-07-31 00:53:29 +08:00
@px920906 解决了!谢谢老哥。此方法有效。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/792753

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX