Laravel 5.2 获取具有角色(委托)的所有用户


Laravel 5.2 Get all users with Role (Entrust)

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

$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();

但这当然行不通。

这就是我为了让它工作所做的。对于其他有问题的人,请查看 Laravel 雄辩关系文档,这就是我解决问题的地方。

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

如果你使用雄辩关系,你也可以做这样的事情。这是反比关系。

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

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

$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或什么,因此请说明。

像这样使用你的查询:-

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