我有一个用户和一个部门,一个用户可以属于很多部门。我试图在用户模型上定义一个范围,只显示当前用户所属部门的用户:
public function scopeVisible($query) {
$user = Auth::user();
return $user->departments()->users();
}
我查看了文档,但似乎无法找到解决方法。
我尝试了映射但遇到了奇怪的错误,即使对象是集合,方法调用也会出现在查询构建器而不是集合上。
答案 0 :(得分:1)
正如Laravel docs所述,您可以使用whereHas
为更具体的查询添加自定义约束:
如果您需要更多电量,可以使用whereHas和orWhereHas 将“where”条件放在您的查询上的方法。这些方法 允许您向关系约束添加自定义约束。
然后这应该有效:
public function scopeVisible($query) {
$user_id = Auth::user()->id;
return $query->whereHas('departaments', function($query) use ($user_id) {
$query->where('user_id', '=', $user_id);
});
}
你得到的错误“方法调用必须在查询构建器而不是集合”这是因为在你的代码中你返回$user->departments()->users()
的结果,这是在Departments的集合中,您应该返回查询构建器。