Умовне завантаження зв'язків
Потрібні різні зв'язки в залежності від контексту?
Використовуйте when() для умовного eager loading.
Типові кейси:
- Admin vs звичайний користувач
- API vs web
- Різні рівні деталізації
Перевага: одна логіка запиту, різні варіанти відповіді.
// За роллю
$posts = Post::query()
->when(auth()->user()->isAdmin(), function ($query) {
$query->with(['author', 'drafts', 'revisions']);
})
->when(!auth()->user()->isAdmin(), function ($query) {
$query->with('author:id,name');
})
->get();
// За параметрами запиту
$posts = Post::query()
->when(request()->has('include_author'),
fn($q) => $q->with('author')
)
->when(request()->has('include_comments'),
fn($q) => $q->with('comments.user')
)
->get();