2016-07-14 49 views
0

基本上我只想转储所有具有特定角色的用户。当我这样做:Laravel 5.2获得角色所有用户(Entrust)

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

我让所有的用户和角色的用户添加的,像这样:

{ 
id: 1, 
first_name: "P", 
last_name: "Tag", 
email: "[email protected]", 
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(); 

但这当然不起作用。

回答

2

所以这是我做过什么来得到它的工作。对于有问题的人来看看Laravel雄辩关系文档,那是我解决问题的地方。

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

可以为预先加载这样的查询指定其他查询约束:

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

更新:如果要指定其他查询约束用户的表,你可以把它们连这样的:

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

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

+0

嗯,我得到这是什么是应该做的,但现在它返回的所有用户,只要那些角色是业主有附加到JSON,那些谁不仍然名单,但没有作用。 – Packy

+0

所以你想查询用户表,而不是急于加载的查询!好的,看到更新的答案 – ClearBoth

+0

嘿,没有尝试过你的答案,但我知道了。如果你愿意,你可以查看我的答案。干杯。 – Packy

0

使用您的查询是这样的: -

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

与@clearboth相同 – Packy

相关问题