Как отобразить несколько тегов сообщения в блоге в шаблоне лезвия сообщения в блоге с помощью laravel?

У меня есть две таблицы: теги и Сообщение блога каждое сообщение имеет несколько тегов, хранящихся в одном столбце (разделенных запятой).

Таблица тегов:

  tag_id   tag_name
    1       Health
    2       Beauty
    3       Fitness
    4       Yoga

Блог_пост Таблица

  post_id   post_tags
    1         1,2
    2         2,3,4
    3         1,4

Мне нужно получить имена тегов в соответствии с post_id с помощью построителя запросов в laravel. например: если post_id = 1

Health,Beauty 

если post_id = 2

Beauty, Fitness, Yoga

почему вы храните теги через запятую?? вы не можете хранить каждый в отдельном поле?

Palak Jadav 15.03.2019 05:20

потому что список тегов длинный. Пост может содержать более 50 тегов.

HappyCoding 15.03.2019 05:23

хорошо, но вы также можете использовать сводную таблицу.

Palak Jadav 15.03.2019 05:26
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
3
197
2

Ответы 2

сделать сводную таблицу для таблицы post_tag и сохранить post_id и tag_id в этой таблице схема будет

 post_tag
  -id
  -post_id
  -tag_id

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

чем вы можете получить данные, используя отношение «многие ко многим».

В Post Model создайте отношения для тега

  public function tags()
  {
     return $this->belongsToMany('App\Tag', 'post_tag', 'post_id', 'tag_id');
  }

чем извлекать теги

$productTags = Product::with('tags')->find(1)

Я хотел бы предложить использовать «Один ко многим» или «Многие ко многим». Но Вы можете попробовать вот так

Внутри вашей модели поста

 class Post extends Model
    {
        public function getTag(){
            $s = array();
            $post_tags =  explode(',',str_replace(array('[',']'),'',$this->post_tags));
            foreach ($post_tags as &$value) {
                array_push($s,$value);
            }
            $tags = Tag::whereIn('id',$s)->get()->pluck('tag_name');

            return implode(",",$tags->toArray());
        }
    }

Внутри твоего клинка

<ul>
  @foreach($posts as $post)
    <li>
        {{$post->getTag()}}
    </li>
  @endforeach
</ul>

Или

<ul>

        @foreach($posts as $post)
            <li>
                @php
                    $s = array();
                      $post_tags =  explode(',',str_replace(array('[',']'),'',$post->post_tags));
                      foreach ($post_tags as &$value) {
                          array_push($s,$value);
                      }
                      $tags = App\Tag::whereIn('id',$s)->get()->pluck('tag_name');

                      $tags =implode(",",$tags->toArray());
                @endphp
                {{$tags}}

            </li>
        @endforeach
    </ul>

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