Search code examples
laravellaravel-5eloquentrolesentrust

Eloquent User Where Clause with Entrust Library


I'm trying to select all users for a company. But only users who has "admin" role status (Entrust, etc.).

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

The above is throwing an error. Left a bit lost on how to run such a query. Where am I going wrong with this? Very little documentation on Entrust.


Solution

  • You can use plain Eloquent for this. The whereHas method would generate one query:

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

    Or, you can just get the roles and then get all of that role's users. This would generate two queries, but ultimately achieve the same thing.

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