Пишу функционал сохранения постов пользователями.
Есть модели 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();