Почему с одним тегом? Чтобы тег спам не модерировать?) Лучше сделать изначально сколько угодно тегов и ограничивать настройками приложения, чтобы не рефакторить потом структуру бд. По теме. Нужно юзеров связать с тегами, а теги с постами через manyToMany типа
public function tags()
{
return $this->belongsToMany('как в доках');
}
и запрашивать
$user = User::with('tags.posts')
->find(Auth::id());
будет юзер с коллекцией тегов, а у каждого тега коллекция постов. в шаблоне можно форычить так
@foreach ($user->tags as $tag)
@foreach ($tag->posts as $post)
{{ $post->name }}
@endforeach
@endforeach
Как получить посты тегов юзера сразу. В Tag делаем скоп
public function scopeOfUser($query, $userId)
{
return $query->whereHas('users', function($query) use($userId) {
$query->where('user_tag.user_id',$userId);
});
}
И сам запрос
$posts = Post::with('tags')
->whereHas('tags', function($query) use($userId) {
$query->ofUser($userId);
})->get();
Или сделать
полиморфные отношения, я сними не работал, но возможно здесь подойдут.