尝试实现以下关系:
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和多个查询过滤?
编辑 - 每个作业也可以属于一个或多个地区/合同组合
答案 0 :(得分:1)
根据您的确切用例,您可以删除其中一个表
contract
-id
regions
-id
contracts_regions_jobs
-job_id
-contract_id
-region_id
jobs
-id
我会避免将null置于其中一个id中,所以只有在总是需要这三个时才能正常工作。这就是说你可以添加一个类似none的默认作业。
我不知道它会变得多干净。