我有这个工作在我的控制器当前:
use AppModelsOrganisation;
use AppModelsUser;
public function show(User $user)
{
$orgs = Organisation::with([
'users' => function ($query) use ($user) {
$query->where('user_id', '=', $user->id)
->orWhereNull('user_id');
}
])
->get();
dd($orgs);
}
我想使用动态局部作用域尽可能多地移动到模型中。我试过了:
public function scopeAllOrgsOneUserMemberOrNot($query, $user)
{
$query->where('user_id', '=', $user->id)->orWhereNull('user_id');
}
但是当我运行:
public function show(User $user)
{
$orgs = Organisation::with(['users' => function ($query) use ($user) {
$query->AllOrgsOneUserMemberOrNot($query, $user);
}])->get();
dd($orgs);
}
我得到以下ErrorException:Undefined property: IlluminateDatabaseEloquentRelationsBelongsToMany::$id
如何将此查询生成器片段移动到作用域?
不需要传递作用域的第一个参数。查看文档中的示例。function scopeActive($query) { ... }
变成active()
$query->AllOrgsOneUserMemberOrNot($user);
应该可以。