Php 在laravel 5.4中,如何仅获取用户的好友帖子?

Php 在laravel 5.4中,如何仅获取用户的好友帖子?,php,mysql,laravel,laravel-5,Php,Mysql,Laravel,Laravel 5,到目前为止,我已经获得了$user\u friends\u id中的用户好友id,然后将它们与帖子上的用户id进行匹配,但它只获得了第一个好友帖子,而没有其他帖子。如何更改它以获取所有好友的帖子,而不仅仅是第一个好友?您可以使用: 一行: $user_id = auth::user()->id; $user_friends = User::find($user_id)->friends; $user_friends_id = $user_friends->pluck('id')

到目前为止,我已经获得了$user\u friends\u id中的用户好友id,然后将它们与帖子上的用户id进行匹配,但它只获得了第一个好友帖子,而没有其他帖子。如何更改它以获取所有好友的帖子,而不仅仅是第一个好友?

您可以使用:

一行:

$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);
您可以使用,您需要一个ID数组。该函数只提供一个特定列(键)的集合,因此需要对其调用
toArray
,以获得一个包含值的数组,而不是集合。 此外,您可以使用
User::find
消除额外的查询,因为您正在查找经过身份验证的用户,并且您已经使用
Auth::User()
查询了该用户

所以我想说你需要以下几点:

$posts = Post::whereIn('user_id', auth()->user()->friends()->pluck('id'))->get();

您不需要使用
find()
执行额外的查询,然后获取所有friends对象来获取它们的ID。这是一个巨大的开销。只要这样做:

$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);

尝试使用
$posts=Post::其中('user\u id',$user\u friends\u id)
您应该尝试加入。(关系)使用多个查询可能会变得很慢很快。您不需要使用
toArray()
方法,因为
其中()
也可以用于集合。@AlexeyMezenin哦,很好,我不知道这一点。非常感谢。
$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);
Post::whereIn('user_id', auth()->user()->friends()->pluck('id'))->get()