Как добавлять условия WHERE в Eloquent в зависимости от фильтра?

Есть такой запрос
$posts = Post::where('category_id', $category_id)->get();


В $_GET['category_id'] передается id категории. Но, допустим, я хочу отобразить ВСЕ посты? что мне тогда лучше всего передать в $_GET['category_id'], чтобы не дублировать код запроса, т.е. чтобы не делать так:

if ($request->has('category_id')) {
   $category_id = $request->category_id;
   $posts = Post::where('category_id', $category_id)->get();
} else {
   $posts = Post::all();
}


Есть какой-то вариант упростить этот код?
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
maddog670
@maddog670
https://laraveldaily.com/less-know-way-conditional...
$query = Author::query();

$query->when(request('filter_by') == 'likes', function ($q) {
    return $q->where('likes', '>', request('likes_amount', 0));
});
$query->when(request('filter_by') == 'date', function ($q) {
    return $q->orderBy('created_at', request('ordering_rule', 'desc'));
});

$authors = $query->get();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы