Laravel属于ToManyThrough双枢轴关系

时间:2018-01-25 17:50:00

标签: php laravel orm eloquent laravel-5.5

尝试实现以下关系:

Contracts have many Regions
Regions have many Contracts

到目前为止,这么好,简单属于ToMany。然后:

Each Contract/Region combination can have many Jobs

因此,工作可以属于特定地区的合同。

我有:

contract
 -id

regions
 -id

contracts_regions
 -id
 -contract_id
 -region_id

contracts_regions_jobs
 -contract_region_id
 -job_id

jobs
 -id

通过一些细木工和ContractRegion模型,我可以保留急切的加载并执行以下操作:

$contract->regions
$contract->regions->first()->jobs
$contract->jobs

等。但它很混乱,实际上在一个地区增加一份合同的工作会更加混乱。

有没有其他方法可以有效地实现这个三角形?或者,我能做的最好是在合同,地区和工作之间进行3向转移,并采用php和多个查询过滤?

编辑 - 每个作业也可以属于一个或多个地区/合同组合

1 个答案:

答案 0 :(得分:1)

根据您的确切用例,您可以删除其中一个表

contract
 -id

regions
 -id

contracts_regions_jobs
 -job_id
 -contract_id
 -region_id

jobs
 -id

我会避免将null置于其中一个id中,所以只有在总是需要这三个时才能正常工作。这就是说你可以添加一个类似none的默认作业。

我不知道它会变得多干净。