Динамические отношения в laravel с использованием подзапросов для отношений

Поскольку я следил за Eloquent Performance Patterns Джонатана Рейнинка, он объяснил, как добавить динамические отношения, используя подзапрос для моделей со многими отношениями. Но согласно моему приложению мне нужно сделать то же самое для отношений принадлежности. Пожалуйста, помогите мне достичь этого.

Вот пример следующего исходного кода, в котором достигается указанная выше динамическая связь с использованием подзапроса для моделей с взаимосвязью hasmany.

$query = User::query()
    ->addSelect(['role' => Role::select('name')
        ->whereColumn('user_id', 'users.id')
        ->latest()
        ->take(1)
    ]);
        
return $this->applySorting($query);

person ToxifiedHashkey    schedule 27.01.2021    source источник
comment
Вы не можете добавить выбор для отношения ко многим. Попробуйте with() для оптимальной работы БД в общем случае.   -  person Piotrek Zatorski    schedule 28.01.2021
comment
@PiotrekZatorski Ладно, понятно, не знал. Таким образом, нет способа создать динамическую связь в таблице пользователей с помощью подзапросов для отношения «принадлежность ко многим»?   -  person ToxifiedHashkey    schedule 28.01.2021


Ответы (1)


Я считаю, что вы можете ввести соединение со сводной таблицей в предложении подвыбора как

$query = User::query()
             ->addSelect(['role' => Role::select('name')
                ->join('pivot_table as pt', 'roles.id', '=', 'pt.role_id')
                ->whereColumn('pt.user_id', 'users.id')
                ->latest()
                ->take(1)
            ]);
person M Khalid Junaid    schedule 29.01.2021