Search code examples
laraveleloquentrelationshiplaravel-6laravel-permission

Why my model can't see spatie permissions trait method on relationship subquery?


I use spatie/laravel-permissions composer package in my laravel projects. When I run this query:

$jobs = Job::whereIn('id', $ids)->whereHas('user', function ($query) {
    $query->hasRole('company');
})->get();

Return error message

Call to undefined method Illuminate\Database\Eloquent\Builder::hasRole()

How I can fix my problem in my case?


Solution

  • The hasRole-method is not a scope and can't be used on a Builder instance.

    I think you should be able to use the role-scope in your application.

    $jobs = Job::whereIn('id', $ids)->whereHas('user', function ($q) {
        return $q->role('company');
    })->get();