Laravel 5.2获取所有角色的用户(Entrust)

时间:2016-07-14 02:03:31

标签: php laravel

基本上我只想转储具有特定角色的所有用户。当我这样做时:

$users = User::with('roles')->get();

我在用户上添加了所有用户和角色,如下所示:

{
 id: 1,
 first_name: "P",
 last_name: "Tag",
 email: "packy@test.com",
 phone: "5555555555",
 avatar: "",
 last_login: "2016-07-13 23:49:23",
 created_at: "2016-07-13 23:25:05",
 updated_at: "2016-07-13 23:49:23",
 roles: [
  {
   id: 1,
   name: "owner",
   display_name: "Admin",
   description: "Admin user that has full access",
   created_at: "2016-06-07 00:00:00",
   updated_at: "2016-06-07 00:00:00",
     pivot: {
      user_id: 1,
      role_id: 1
     }
  }
 ]
},

很好,我现在只想让角色名称为特定值的用户。我想我的查询看起来像这样,但不知道如何写它:

$users = User::with('roles')->where('roles->name', '=', 'owner')->get();

但那当然不起作用。

4 个答案:

答案 0 :(得分:7)

所以这就是我为了让它发挥作用所做的。对于其他有问题的人,请查看Laravel Eloquent Relationship文档,这就是我解决问题的地方。

 $users = User::whereHas('roles', function ($query) {
            $query->where('name', '=', 'owner');
 })->get();

答案 1 :(得分:1)

您可以为热切换加载查询指定其他查询约束,如下所示:

$users = User::with(['roles' => function ($query) {
    $query->where('name', '=', 'owner');
}])->get();

更新:如果您想为users表指定其他查询限制,可以将它们链接起来:

$users = User::with(['roles' => function ($query) {
    $query->where('name', '=', 'owner');
}])->where('role_id', '<>', null)->->get();

注意:不确定是否为role_id或数据库中的内容,以便说明。

答案 2 :(得分:0)

使用您的查询: -

$users = App\User::with(['roles' => function ($query) {
    $query->where('name', 'owner');
}])->get();

答案 3 :(得分:0)

如果您使用雄辩的关系,您也可以执行以下操作。这是反比关系。

$users = Role::where('name', 'owner')->first()->users;