Отображать ярлык категории в URL вместо идентификатора

Я относительно новичок в 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'
]);

Я пробовал много методов, но ничего не работает. Любая помощь будет оценена.

Большое спасибо,

Пепел

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
1 303
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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');

Я уже пробовал это, я получаю следующую ошибку ErrorException (E_ERROR) Undefined variable: posts (View: / Users / macpro / sites / sixmedia / resources / views / articles / catego‌ ry / categoryposts.b‌ lade.php)

CEO ASH 11.12.2018 02:19

проблема в том, что я пытаюсь зациклить сообщения по выбранной категории, поэтому мне нужно получить доступ к таблице сообщений, чтобы зациклить данные, и мне также нужно получить доступ к таблице категорий, чтобы получить ярлык для категории

CEO ASH 11.12.2018 02:25

Вам не нужно использовать $posts внутри своих категорийposts.blade.php. Достаточно использовать $postCategories->posts - это ваша коллекция, которую вы можете просмотреть. @foreach($postCategories->posts as $post) {{ $post->title }} @endforeach

Сергей Игоревич 11.12.2018 10:19

Он загружается без ошибок, но не зацикливает меню сообщений или категорий.

CEO ASH 11.12.2018 20:46

Это должно сработать для вас:

**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)

CEO ASH 11.12.2018 02:16

SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец 'catslug' в 'where clause' (SQL: выберите count (*) как агрегат из posts, где catslug LIKE music)

CEO ASH 11.12.2018 02:32

Вы можете попробовать это:

<?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']; ?>

Другие вопросы по теме