Получать сообщения по их тегам в laravel

Я показываю все теги сообщений в своем клинке, теперь я хочу выполнить какой-то поиск моих тегов (возьмите изображение ниже в качестве образца)

Получать сообщения по их тегам в laravel

Я хочу, чтобы когда пользователи нажимали на тег laravel, результат каждого сообщения с тегом laravel показывался им.

Вопрос

  1. Как мне сделать эту функцию?

Код

posts model

public function tags(){
   return $this->belongsToMany(Tag::class);
}

tags model

public function posts(){
   return $this->belongsToMany(Post::class);
}

Tag::find($id)->posts не работает?

Jonas Staudenmeir 05.06.2018 03:17

как мне передать это?

mafortis 05.06.2018 03:20

Вы должны поделиться большей частью своего кода (контроллер, представление). При нажатии на тег открывается новая страница?

Jonas Staudenmeir 05.06.2018 03:23

@JonasStaudenmeir, хорошо, теперь я их получил, но что, если я хочу использовать тег title в моем URL-адресе вместо id? поэтому в моем URL-адресе будет site/tag-search/laravel вместо site/tag-search/1

mafortis 05.06.2018 03:27

Название уникально? Вы также можете комбинировать id и title: site/tag-search/laravel/1

Jonas Staudenmeir 05.06.2018 03:30

да, заголовок уникален, но мой вопрос в том, что когда я передаю заголовок вместо идентификатора своему контроллеру, как мне получить его идентификатор, чтобы я мог найти этот идентификатор в своих сообщениях? (вы знаете, что на самом деле мы будем искать по идентификатору тега, вместо этого просто покажите заголовок в URL-адресе)

mafortis 05.06.2018 03:33

Вы можете использовать Tag::where('title', $title)->first(). Или getRouteKeyName(), если вы используете привязку модели маршрута.

Jonas Staudenmeir 05.06.2018 03:37

@JonasStaudenmeir, спасибо, пожалуйста, поделись Tag::find($id)->posts в качестве ответа, я подтверждаю это.

mafortis 05.06.2018 03:40
Стоит ли изучать 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
8
615
1

Ответы 1

Попробуйте что-то вроде этого:

Post::whereHas('tags', function($query) use ($tag) {
    $query->where('title', $tag);
})->get();

Где $tag будет заголовком вашего тега.

Ссылка: https://laravel.com/docs/5.6/eloquent-relationships#querying-relationship-existence

Пример привязки модели маршрута из RouteServiceProvider:

public function boot()
{
    parent::boot();

    Route::patterns([
        'tag_title' => '[a-z]+',
    ]);

    Route::get('posts/{tag_title}', function ($tag_title) {
        return Tag::where('title', $tag_title)->firstOrFail();
    });
}

Я попробую и дам вам знать, спасибо, всего один вопрос: следует ли мне изменить {id} в моем маршруте, чтобы получить заголовок тега в URL-адресе? Если да, то что мне добавить вместо этого?

mafortis 05.06.2018 11:26

Это действительно зависит от того, как вы привязываете модели к маршруту - я бы рекомендовал использовать RouteServiceProvider - затем вы могли бы явно привязать его, используя titlelaravel.com/docs/5.6/routing#route-model-binding

Sebastian Sulinski 05.06.2018 12:11

Я добавил пример привязки модели маршрута.

Sebastian Sulinski 05.06.2018 12:20

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