我有两个表:标签和 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
答案 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>