我有这样的表结构:
工作
- id
- 名字
类型
- id
- 名字
job_type(数据透视表)
- id
- 工作_id
- 类型_id
任务
- id
- 描述
job_type_task(数据透视表)
- id
- 工作类型_id
- 任务ID
注意事项:
我的问题是这个表结构,如何在“作业”和“任务”表之间建立关系以访问与作业关联的所有任务?
我尝试了很多解决方案,例如使用 hasMany 或 hasManyThrough,但没有一个有效。
我应该改变桌子结构吗?或任何通过工作雄辩模型访问任务的解决方案?
jobs: id, name
jobs_types: job_id, type_id
types_tasks: type_id, task_id
tasks: id, description
SELECT j.name
k.description
FROM jobs AS j
JOIN jobs_types AS jy ON jy.job_id = j.id
JOIN types_tasks AS yk ON yk.type_id = jy.type_id
JOIN tasks AS AS k ON k.id = yk.task_id
WHERE j.name = "XYZ"
注意:映射表中不需要
id
,但需要如下索引:
jobs_types:
PRIMARY KEY(job_id, type_id)
INDEX(type_id, job_id)
(我不知道如何将其翻译成Lauravel。)