Laravel多对多(3和3+模型)设计问题

时间:2018-12-02 17:06:32

标签: laravel laravel-5

我有三种型号

  

联系人模型

     

联系人角色模型

     

项目模型

设置;

联系人可以属于多个项目。 (很多对很多)

每个项目都有由用户创建的自己的联系人角色。 (一对多-角色特定于项目)

在选定的项目中,可以将联系人分配给多个角色(多对多)

棘手的部分是我有角色模型的类别,当用户创建角色时,他们从下拉列表中(从数据库中,总共7个预定义类别)为该角色选择一个类别。

然后我尝试做的事情并在理解上有问题;

1。显示特定项目上具有给定角色的所有联系人的最佳方法是什么?

我可以很容易地得到$project->contacts() //this gives me all contacts within that project,但我需要更进一步,可以与他们的角色取得联系。

2。此外,我将如何显示属于该项目所选类别的所有联系人?

3。我应该在模型之间使用除多对多以外的其他连接吗?

1 个答案:

答案 0 :(得分:0)

假设-与

  

显示

您实际上的意思是雄辩的恢复。

建议词-阅读DOCS! Laravel具有出色且易于理解的文档。

https://laravel.com/docs/5.7/eloquent-relationships#eager-loading

  

1)我可以很容易地获得$ project-> contacts()//这可以使我获得该项目中的所有联系人,但是我需要更进一步,可以与他们的角色取得联系。

嵌套渴望加载:

$project = Project::with('contacts.roles')->find($id);
  

2)此外,我将如何显示属于该项目所选类别的所有联系人?

限制渴望的负载并查询关系的存在:

$project = Project::with(['contacts', function($q) use ($categoryId) {
    $q->with('roles')->whereHas(['category' => function($q2) use ($categoryId) {
        $q2->whereId($categoryId);
    });
}]);
  

3。我应该在模型之间使用除多对多以外的其他连接吗?

结构对我来说很好。