В laravel 5.4 как я могу получить только сообщения друзей пользователей?

$user_id = auth::user()->id;
$user_friends = User::find($user_id)->friends;
$user_friends_id = $user_friends->pluck('id');
$posts = Post::where('user_id', $user_friends_id)->get();
return view('dashboard')->with('posts', $posts);

Пока у меня есть идентификаторы друзей пользователей в $ user_friends_id, а затем они сопоставляются с идентификаторами пользователей в сообщениях, но получаются только первые сообщения друзей, а не остальные. Как я могу изменить его, чтобы получать все сообщения друзей, а не только первых друзей?

3

Решение

Вам не нужно выполнять дополнительный запрос с find() а затем получить все объекты друзей, просто чтобы получить их идентификаторы. Это огромные накладные расходы. Просто сделай это:

Post::whereIn('user_id', auth()->user()->friends()->pluck('id'))->get()
4

Другие решения

Ты можешь использовать в которой, для которого вам нужен массив идентификаторов. срывать Функция дает вам набор только определенного столбца (ключа), поэтому вам нужно вызвать toArray на нем иметь массив со значениями вместо коллекции.
Кроме того, вы можете устранить дополнительный запрос с помощью User::find так как вы ищете аутентифицированного пользователя, и вы уже запросили это с Auth::user(),

Поэтому я бы сказал, что вам нужно следующее:

$user_friends = Auth::user()->friends;
$user_friends_id = $user_friends->pluck('id')->toArray();
$posts = Post::whereIn('user_id', $user_friends_id)->get();
return view('dashboard')->with('posts', $posts);
2

Ты можешь использовать в которой:

$user_id = auth::user()->id;
$user_friends = User::find($user_id)->friends;
$user_friends_id = $user_friends->pluck('id');
$posts = Post::whereIN('user_id', $user_friends_id)->get();
return view('dashboard')->with('posts', $posts);

В одной строке:

$posts = Post::whereIn('user_id', auth()->user()->friends()->pluck('id'))->get();
2
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector