Не работает вывод категорий Laravel

    public function showListPage(Request $request)
{
    $posts = Post::with('category', 'images')
        ->where(function($q) use($request) {
            if ($request->has($request->category_url)) {
                $q->where('category_url', '=', (string)$request->category_url);
            }
        })
        ->whereIsActive(true)
        ->orderByDesc('created_at')
        ->paginate(self::POSTS_PER_PAGE);

    $category = category::all();

    return view('post.home', ['posts' => $posts, 'category' => $category]);
}

Выводит всегда все новости.

Route::get('/novosti', ['uses' => 'PostController@showListPage']); тут всё норм.
Route::get('/novosti/{category_url}', ['uses' => 'PostController@showListPage']);

Ответы (2 шт):

Автор решения: Евгений Николаев

Сделайте следующим образом.

1) Так как вы используете один и тот же метод в контроллере для всех новостей и для категорий, используйте один маршрут с необязательным параметром

Route::get('/novosti/{category_url?}', ['uses' => 'PostController@showListPage']);

2) Для чего Вам в контроллере весь Request? пускай в контроллер передается только нужные параметры из запроса, т.е ваша категрия

public function showListPage($category_url = null)

По умолчанию мы присваиваем NULL, это нужно для того, что если запрос был без категории.

3) В Вашем запросе не работает условие $request->has, т.к оно предназначено для работы с формами.

$posts = Post::with('category', 'images')
        ->where(function($q) use($category_url) {
            if ($category_url) {
                $q->where('category_url', '=', (string)$category_url);
            }
        })
        ->whereIsActive(true)
        ->orderByDesc('created_at')
        ->paginate(self::POSTS_PER_PAGE);
→ Ссылка
Автор решения: Incover
Route::get('/novosti', ['uses' => 'PostController@showListPage']);
Route::get('/novosti/{category_url}', ['uses' => 'PostController@showListPage']);

    public function showListPage($categoryUrl = null)
{
    $category = Category::whereCategoryUrl($categoryUrl)->first();

    $posts = Post::with('category', 'images')
        ->where(function($q) use($category) {
            if ($category && $category->category_id) {
                $q->whereCategoryId($category->category_id);
            }
        })
        ->whereIsActive(true)
        ->orderByDesc('created_at')
        ->paginate(self::POSTS_PER_PAGE);

    $category = Category::all();

    return view('post.home', ['posts' => $posts, 'category' => $category]);
}
→ Ссылка