【问题标题】:Laravel 5.2 Get all users with Role (Entrust)Laravel 5.2 获取所有具有角色的用户(委托)
【发布时间】:2019-02-20 21:45:52
【问题描述】:

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

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

但这当然行不通。

【问题讨论】:

    标签: php laravel


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        您可以像这样为急切加载查询指定额外的查询约束:

        $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 或什么,所以这只是为了说明。

        【讨论】:

        • 嗯我明白了这应该做什么,但现在它返回所有用户,只是那些角色为 Owner 的用户将其附加到 JSON,那些没有的用户仍然是列表但没有角色。
        • 所以你想查询用户表而不是急切加载的查询!好的,看看更新的答案
        • 嘿,没试过你的答案,但我想通了。如果你愿意,可以查看我的答案。干杯。
        【解决方案4】:

        像这样使用您的查询:-

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

        【讨论】:

          猜你喜欢
          • 2023-03-26
          • 2014-04-24
          • 1970-01-01
          • 2021-10-06
          • 2023-03-21
          • 1970-01-01
          • 2015-01-09
          • 1970-01-01
          • 2016-06-18
          相关资源
          最近更新 更多