#laravel #laravel-8
Вопрос:
В настоящее время это работает в моем контроллере:
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
Как переместить этот фрагмент построителя запросов в область видимости?
Ответ №1:
Первый параметр области не нужно передавать. Проверьте пример в документации. function scopeActive($query) { ... }
превращается в active()
.
$query->AllOrgsOneUserMemberOrNot($user);
Это должно сработать.