如何使用laravel在博客文章的刀片模板中显示博客文章的多个标签?

时间:2019-03-15 04:13:10

标签: mysql laravel laravel-5 query-builder

我有两个表:标签 blog_post 每个帖子在同一列中存储有多个标签(用逗号分隔)。

标签表:

  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

我需要使用laravel中的查询生成器根据post_id获取标签名称。 像:如果post_id = 1

Health,Beauty 

如果post_id = 2

Beauty, Fitness, Yoga

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我建议使用一对多或多对多。但是 您可以这样尝试

内部帖子模型

 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>