将数据透视查询构建器从控制器移动到模型范围
Moving pivot query builder from controller to model scope
我目前在我的控制器中使用此功能:
use App\Models\Organisation;
use App\Models\User;
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: Illuminate\Database\Eloquent\Relations\BelongsToMany::$id
如何将此查询生成器片段移动到一个范围?
范围的第一个参数不需要传递。检查文档中的示例。 function scopeActive($query) { ... }
变成 active()
.
$query->AllOrgsOneUserMemberOrNot($user);
这应该有效。
我目前在我的控制器中使用此功能:
use App\Models\Organisation;
use App\Models\User;
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: Illuminate\Database\Eloquent\Relations\BelongsToMany::$id
如何将此查询生成器片段移动到一个范围?
范围的第一个参数不需要传递。检查文档中的示例。 function scopeActive($query) { ... }
变成 active()
.
$query->AllOrgsOneUserMemberOrNot($user);
这应该有效。