为什么我的模型在关系子查询上看不到Spatie权限特征方法?

时间:2019-09-11 11:30:17

标签: laravel eloquent relationship spatie laravel-6

我在laravel项目中使用spatie/laravel-permissions作曲家软件包。 当我运行此查询时:

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

返回错误消息

  

调用未定义的方法    Illuminate \ Database \ Eloquent \ Builder :: hasRole()

如何解决我的问题?

2 个答案:

答案 0 :(得分:1)

hasRole-method不是作用域,不能在Builder实例上使用。

我认为您应该可以在应用程序中使用role-scope

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

答案 1 :(得分:0)

由于传递给函数闭包的$user是查询生成器实例,而不是User模型的实例,因此在声明上述$user的位置,请确保获取实例

$user = User::where(......, ........)->first(); // Without first() it's a query builder
$jobs = Job::whereIn('id', $ids)->whereHas('user', function ($user) {
    $user->hasRole('company');
})->get();