具有多个多对多关系的雄辩关系 - Laravel

问题描述 投票:0回答:1

我有这样的表结构:

工作

  • id
  • 名字

类型

  • id
  • 名字

job_type(数据透视表)

  • id
  • 工作_id
  • 类型_id

任务

  • id
  • 描述

job_type_task(数据透视表)

  • id
  • 工作类型_id
  • 任务ID

注意事项:

  1. 工作有多种类型,反之亦然
  2. job_type 有很多任务,反之亦然

我的问题是这个表结构,如何在“作业”和“任务”表之间建立关系以访问与作业关联的所有任务?

我尝试了很多解决方案,例如使用 hasMany 或 hasManyThrough,但没有一个有效。

我应该改变桌子结构吗?或任何通过工作雄辩模型访问任务的解决方案?

php mysql pivot-table eloquent-relationship laravel-10
1个回答
0
投票
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。)

© www.soinside.com 2019 - 2024. All rights reserved.