Не работает вывод категорий 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]);
}