$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中找到了用户朋友ID,然后将它们与帖子上的用户ID相匹配,但它只获得了第一个朋友帖子,而不是其他帖子。如何更改它以获取所有朋友的帖子而不仅仅是第一批朋友?
您不需要使用find()
执行其他查询,然后获取所有朋友对象以获取其ID。这是一个巨大的开销。这样做:
Post::whereIn('user_id', auth()->user()->friends()->pluck('id'))->get()
您可以使用whereIn,您需要一系列ID。 Pluck函数为您提供了一个特定列(键)的集合,因此您需要在其上调用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);
你可以使用whereIn:
$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();