@PHPjedi

Как правильно составить запрос к БД?

Доброе утро!

Не упрекайте тем, что это можно найти в документации. Увы, я не смог.

Мне нужно вывести посты по id, которые хранятся в таблице watch_list для каждого пользователя.

запрос к watch_list:

$user_watch_list = WatchList::where('user_id', Auth::user()['id'])->get();


Пример получаемого:

#original: array:5 [▼
        "id" => 14
        "user_id" => 2
        "post_id" => 1
        "created_at" => "2018-05-20 01:03:30"
        "updated_at" => "2018-05-20 01:03:30"
      ]


Как я могу собрать все id в едино и составить запрос к posts, чтобы получить все нужные мне посты ?

Заранее большое спасибо!
  • Вопрос задан
  • 132 просмотра
Решения вопроса 2
@Hnkhame
Если правильно понял, то так

$postsIds = WatchList::where('user_id', Auth::user()['id'])->get()->pluck('post_id')->toArray();
Ответ написан
@SteepZero
$posts = Post::whereIn('id', Auth::user()->watchlist()->select('post_id')->get()->toArray())->get();

По полочкам:
Post::whereIn( 'id' , array ) - плучаем все посты, id которых есть в массиве array

Массив array формируется вот так: Auth::user()->watchlist()->select('post_id')->get()->toArray()
Auth::user()->watchlist() - получаем QueryBuilder для запроса к WatchList (должна быть связь one-to-many в модели user)
->select('id') - ограничиваем выборку из WatchList одними id'шниками
->get()->toArray() - получаем id`шники, переводим в массив
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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