在laravel 5.4我怎么才能得到用户朋友的帖子?

问题描述 投票:3回答:3
$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相匹配,但它只获得了第一个朋友帖子,而不是其他帖子。如何更改它以获取所有朋友的帖子而不仅仅是第一批朋友?

php mysql laravel laravel-5
3个回答
4
投票

您不需要使用find()执行其他查询,然后获取所有朋友对象以获取其ID。这是一个巨大的开销。这样做:

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

2
投票

您可以使用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);

2
投票

你可以使用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();
© www.soinside.com 2019 - 2024. All rights reserved.