为啥我的模型在关系子查询中看不到 spatie 权限特征方法?
Posted
技术标签:
【中文标题】为啥我的模型在关系子查询中看不到 spatie 权限特征方法?【英文标题】:Why my model can't see spatie permissions trait method on relationship subquery?为什么我的模型在关系子查询中看不到 spatie 权限特征方法? 【发布时间】:2020-01-13 05:41:51 【问题描述】:我在我的 laravel 项目中使用 spatie/laravel-permissions composer 包。 当我运行这个查询时:
$jobs = Job::whereIn('id', $ids)->whereHas('user', function ($query)
$query->hasRole('company');
)->get();
返回错误信息
调用未定义的方法 Illuminate\Database\Eloquent\Builder::hasRole()
我该如何解决我的问题?
【问题讨论】:
您传递的是查询生成器实例而不是记录,dd($user)
在查询之前查看
发布你声明 $user 的代码
这里 var $user
没有被声明为变量。这是Builder
对象
你怎么看,我必须如何重写我的代码才能获得具有公司角色的用户的工作?
发布 Builder 对象代码
【参考方案1】:
因为传递给函数闭包的$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();
【讨论】:
【参考方案2】:hasRole
-method 不是作用域,不能用于 Builder 实例。
我认为您应该能够在您的应用程序中使用role
-scope。
$jobs = Job::whereIn('id', $ids)->whereHas('user', function ($q)
return $q->role('company');
)->get();
【讨论】:
以上是关于为啥我的模型在关系子查询中看不到 spatie 权限特征方法?的主要内容,如果未能解决你的问题,请参考以下文章