@NikSIk31

Laravel отображение по подпискам?

Есть таблица, так сказать, с тегами на которые подписан пользователь. (Например: природа, наука)
И ещё таблица постов где пост со всякой всячиной и одним тегом. Нужно получить все посты с тегами, на которые подписан пользователь.
--- сейчас у меня в голове решение такое:
Получаю список тегов примерно Tag::where("user_id", Auth::user()->id)->get(); дальше наверное надо преобразовать в массив и как-то и получить Post::select("name")->whereIn($tags)->get(); вот как то так у меня на ум приходит. Можете дать критику/ или натолкнуть на лучшее решение?
  • Вопрос задан
  • 146 просмотров
Пригласить эксперта
Ответы на вопрос 2
@jazzus
Почему с одним тегом? Чтобы тег спам не модерировать?) Лучше сделать изначально сколько угодно тегов и ограничивать настройками приложения, чтобы не рефакторить потом структуру бд. По теме. Нужно юзеров связать с тегами, а теги с постами через 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();

Или сделать полиморфные отношения, я сними не работал, но возможно здесь подойдут.
Ответ написан
@NubasLol
Вот как получить ids, твое решение нормальное

$ids = Tag::where("user_id", Auth::user()->id)->pluck('id')
 Post::select("name")->whereIn($ids)->get()


Ну или сделать Has One Through отношение

https://laravel.com/docs/5.8/eloquent-relationship...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы