$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, а затем они сопоставляются с идентификаторами пользователей в сообщениях, но получаются только первые сообщения друзей, а не остальные. Как я могу изменить его, чтобы получать все сообщения друзей, а не только первых друзей?
Вам не нужно выполнять дополнительный запрос с find()
а затем получить все объекты друзей, просто чтобы получить их идентификаторы. Это огромные накладные расходы. Просто сделай это:
Post::whereIn('user_id', auth()->user()->friends()->pluck('id'))->get()
Ты можешь использовать в которой, для которого вам нужен массив идентификаторов. срывать Функция дает вам набор только определенного столбца (ключа), поэтому вам нужно вызвать 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);
Ты можешь использовать в которой:
$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();