将数据透视查询构建器从控制器移动到模型范围



我有这个工作在我的控制器当前:

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);

应该可以。

相关内容

  • 没有找到相关文章

最新更新