junk1114
@junk1114
Web-программист

Как вывести модели с просчитанным заранее значением без лишних запросов?

Пишу функционал сохранения постов пользователями.
Есть модели User, Post со связью многие-ко-многим через таблицу 'saved_post_user'

В модели User связь, которая получает сохраненные посты у пользователя:
public function savedPosts()
    {
        return $this->belongsToMany('App\Models\Post', 'saved_post_user');
    }


В модели Post связь, которая получает пользователей, которые сохранили пост:
public function savedUsers()
    {
        return $this->belongsToMany('App\Models\User', 'saved_post_user');
    }


Функция в контроллере для вывода постов:
public function posts()
    {
        $data['posts'] = Post::orderBy('rating', 'desc')->with('comments')->get();
        return view('posts', $data);
    }


Ну и в шаблоне циклом вывожу посты.
Задача состоит в том, что бы у поста выводить, сохранен ли текущий пост авторизованным пользователем или нет.
Можно делать в цикле вывода постов так:
@if ($post->savedUsers->contains(Auth::id()))
       <strong>Пост сохранен</strong>
@endif

Но это порождает кучу лишних запросов к БД.
В идеале мне нужно выводить посты так:
@if ($post->saved)
       <strong>Пост сохранен</strong>
@endif
$post->title
$post->rating
...

Получается что нужно что-то впихнуть в функцию вывода постов в контроллере, а вот что, ума не приложу.
$data['posts'] = Post::orderBy('rating', 'desc')->with('comments')->get();
  • Вопрос задан
  • 225 просмотров
Решения вопроса 1
Tesla
@Tesla
Ну вы же используете жадную загрузку комментариев, чтобы не плодить запросы. Почему бы не добавить туда и пользователей with('comments', 'savedUsers')? Если слишком много строк получается, можно ограничить.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы