Хочу сделать возможность для апи указывать в get параметре некоторые связи, которые могут быть нужны клиенту.
Например, при получении постов указать, что нужны так же и авторы этих постов.
Изначально это нужно было только для списка ресурсов аля get /posts. Сделал отдельный класс фильтрации, через который прогоняется Post::query() и в зависимости от параметров get в объекте Request к запросу добавляются условия выборки, сортировки и внешних связей. В целом работает нормально.
Потом появилась необходимость получать связи и при получении одного, конкретного ресурса (get /posts/123).
В метод show контроллера сразу приходит готовая модель нужного поста, если таковой имеется.
class PostController extends Controller
{
public function index(Request $reqquest)
{
//...
}
public function show(Request $request, Post $post)
{
//...
}
}
Если в случае с методом index я работаю с \Illuminate\Database\Eloquent\Builder и добавляю условия выборки связей в него, то в случае с методом show у меня уже готовая модель и работать нужно с ней.
Я хочу сделать один обработчик, который будет определять, какие связи нужны и во всех случаях использовать его. Посмотрел JsonResource. Для отдельного поста можно добавлять подключение связей при необходимости. Но если сделать это для коллекции из 50 - 100 постов, то получаем 50 - 100 дополнительных запросов к базе. Если бы можно было подгрузить связи одним запросом для всей коллекции из дочерних классов JsonResource, то получилось бы удобно. Я бы не добавлял связи в Builder а использовал бы только ресурсы.
Собственно, есть ли в ларке встроенные примочки для этого? Чтобы велосипеды не городить.
Или может есть, какие-то более разумные подходы, которых я не вижу? Лару недавно изучаю, многого не знаю еще.