У меня есть две таблицы: теги и Сообщение блога каждое сообщение имеет несколько тегов, хранящихся в одном столбце (разделенных запятой).
Таблица тегов:
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
потому что список тегов длинный. Пост может содержать более 50 тегов.
хорошо, но вы также можете использовать сводную таблицу.






сделать сводную таблицу для таблицы 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>
почему вы храните теги через запятую?? вы не можете хранить каждый в отдельном поле?