Я относительно новичок в Laravel, и я обнаружил, что застрял, пытаясь отображать ярлыки категорий вместо идентификатора.
eg: www.website/.../category-slug
На моем веб-сайте сейчас отображается www.website/.../category-id. У меня есть таблица категорий и таблица сообщений со столбцами.
posts table = | id | title | body | img | post_category_id|
post_categories table = | id | name | catslug |
Контроллер
public function getPostCategory($id)
{
$postCategories = PostCategory::with('posts')
->orderBy('name', 'asc')
->get();
$posts = Post::orderBy('id', 'desc')
->where('post_category_id', $id)
->paginate(5);
return view('articles.category.categoriesposts')->withPosts($posts)->with('postCategories', $postCategories);
}
Маршрут
Route::get('articles/category/{id}', [
'uses' => 'ArticlesController@getPostCategory',
'as' => 'pcategory'
]);
Я пробовал много методов, но ничего не работает. Любая помощь будет оценена.
Большое спасибо,
Пепел






ArticlesController.php
public function getPostCategory($slug) {
$postCategories = PostCategory::with('posts')
->orderBy('name', 'asc')
->where('catslug', '=', $slug)
->first();
// $postCategories->posts - already is a collection of your posts related only to the category you're looking for
// return view
return view ('articles.category.categoriesposts')->with('postCategories', $postCategories);
}
Route::get('articles/category/{slug}', [
'uses' => 'ArticlesController@getPostCategory' ,
'as' => 'pcategory'
] );
Вот и все. Кроме того, вы можете минимизировать свой код маршрута:
Route::get('articles/category/{slug}', 'ArticlesController@getPostCategory')->name('pcategory');
проблема в том, что я пытаюсь зациклить сообщения по выбранной категории, поэтому мне нужно получить доступ к таблице сообщений, чтобы зациклить данные, и мне также нужно получить доступ к таблице категорий, чтобы получить ярлык для категории
Вам не нужно использовать $posts внутри своих категорийposts.blade.php. Достаточно использовать $postCategories->posts - это ваша коллекция, которую вы можете просмотреть. @foreach($postCategories->posts as $post) {{ $post->title }} @endforeach
Он загружается без ошибок, но не зацикливает меню сообщений или категорий.
Это должно сработать для вас:
**ROUTE:**
Route::get('articles/category/{slug}', [
'uses' => 'ArticlesController@getPostCategory' ,
'as' => 'pcategory'
] );
**CONTROLLER**
public function getPostCategory($slug) {
$postCategories = PostCategory::with('posts')
->orderBy('name', 'asc')
->get();
$posts = Post::orderBy('id', 'desc')
->whereHas('post_category', function ($query) use ($slug) {
$query->where('catslug', 'like', $slug);
})->paginate(5);
// return view
return view ('articles.category.categoriesposts')->withPosts($posts)->with('postCategories', $postCategories);
}
я получаю следующую ошибку SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец 'catslug' в 'where clause' (SQL: выберите count (*) как агрегат из posts, где catslug LIKE drama)
SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец 'catslug' в 'where clause' (SQL: выберите count (*) как агрегат из posts, где catslug LIKE music)
Вы можете попробовать это:
<?php
if (isset($_GET['slug'])){
$get_slug = $_GET['slug'];
$query = "SELECT * FROM `table_name` WHERE get_slug ='$get_slug'";
if ($result = mysqli_query($conn, $query)){
$posts = mysqli_fetch_array($result);
}
}
?>
Если вы хотите показать результат, вы можете попробовать этот код.
<?php echo $posts['get-slug']; ?>
Я уже пробовал это, я получаю следующую ошибку ErrorException (E_ERROR) Undefined variable: posts (View: / Users / macpro / sites / sixmedia / resources / views / articles / catego ry / categoryposts.b lade.php)