【问题标题】:Eloquent User Where Clause with Entrust LibraryEloquent User Where 子句与 Entrust 库
【发布时间】:2016-03-02 06:23:36
【问题描述】:

我正在尝试为一家公司选择所有用户。但仅限具有“管理员”角色状态(委托等)的用户。

User::where('company_id', Auth::user()->company_id)->hasRole('admin')->get();

上面是抛出一个错误。对如何运行这样的查询有点迷失。我哪里错了?关于 Entrust 的文档很少。

【问题讨论】:

    标签: laravel laravel-5 eloquent roles entrust


    【解决方案1】:

    您可以为此使用普通的 Eloquent。 whereHas 方法会生成一个查询:

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

    或者,您可以只获取角色,然后获取该角色的所有用户。这将生成两个查询,但最终实现相同的目标。

    $users = Role::where('name', 'admin')
                 ->first()
                 ->users()
                 ->where('company_id', Auth::user()->company_id)
                 ->get();
    

    【讨论】:

    • 第一个选项正是我想要的 - 谢谢!
    【解决方案2】:

    认为您需要首先让所有拥有company_id 的用户

    $users = User::where('company_id', Auth::user()->company_id)->get();
    

    然后遍历$users并检查hasRole()

    foreach ($users as $user) {
            if($user->hasRole('admin')){
            //user is admin
        }
    }
    

    更新

    这可能是一个肮脏的解决方案,但您可以尝试进行手动查询

    $admin = DB::table('role_user')
            ->join('users', 'users.id', '=', 'role_user.user_id')
            ->join('roles', 'roles.id', '=', 'role_user.role_id')
            ->where('roles.name', 'admin')->get();
    

    【讨论】:

      猜你喜欢
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-20
      • 2015-08-06
      • 1970-01-01
      • 2022-10-08
      相关资源
      最近更新 更多