三向数据透视表获取用户所属的所有团队以及每个团队的角色

时间:2019-01-31 00:22:40

标签: laravel laravel-5 eloquent pivot relationship

我正在使用用户,团队和角色表之间的belongsToMany关系。

我想做的是查询所有经过身份验证的用户所属的团队,并获取该用户在该团队下所具有的所有角色。然后,我想将其输出到JSON。 (我没有使用刀片)。

用户弗兰克

团队1:

  • 经理
  • 玩家

团队2:

  • 经理

第5队:

  • 玩家

查询输出以显示关系

注意:此查询用于显示响应的关系 return User::first(1)->with('teams','roles')->get();

输出:

{  
   "id":1,
   "username":"Frank",
   "name":"Frank",
   "email":"frank@example.com",
   "teams":[  
      {  
         "id":21,
         "name":"Team 1",
         "pivot":{  
            "user_id":1,
            "team_id":21,
            "role_id": 1
         }
      },
      {  
         "id":1,
         "name":"Team 2",
         "pivot":{  
            "user_id":1,
            "team_id":1,
            "role_id":1
         }
      },
      {  
         "id":3,
         "name":"Team 5",
         "pivot":{  
            "user_id":1,
            "team_id":3
            "role_id":2
         }
      }
   ],
   "roles":[  
      {  
         "id":1,
         "name":"Manager",
         "pivot":{  
            "user_id":1,
            "role_id":1,
            "team_id":21
         }
      },
      {  
         "id":2,
         "name":"Player",
         "pivot":{  
            "user_id":1,
            "role_id":2,
            "team_id":21
      },
      {  
         "id":1,
         "name":"Manager",
         "pivot":{  
            "user_id":1,
            "role_id":1,
            "team_id":1
         }
      },
      {  
         "id":2,
         "name":"Player",
         "pivot":{  
            "user_id":1,
            "role_id":2,
            "team_id":3
         }
      }
   ]
}

**编辑

According to this post on laravel.io, it seems there is an outdated package for this very purpose that only works with Laravel 4

  

场景2

     

对于每个用户,我想知道他们属于哪个团队以及在该特定团队中扮演的角色:users-> team-> roles

1 个答案:

答案 0 :(得分:0)

在用户模型中添加以下方法:


public function getRolesAttribute(){
   return $this->with('teams.roles')->teams->pluck('roles.name')->flatten()->unique()->toArray();
}

现在,如果您检索诸如User::first()->roles之类的用户角色,它必须返回一组角色名称。

祝你好运