属性 [posts] 在此集合实例上不存在 laravel

Property [posts] does not exist on this collection instance laravel

我有三张表

Users
   id  name   email
friends
   id   user_id   friend_id
Posts 
   id   image    users_id 

我想显示登录用户及其所有好友的所有 post。 获得 post 的登录用户 我做到了

$user_id=Auth::user()->id;
$data=User::find($user_id)->posts;

但无法获得所有朋友的 post 我试过这个

$friend_id = [];
$friends=User::find($user_id)->friends;  //get all friends it returns like that [2,3]
  foreach ($friends as $friend) {
    $friend_id[]=$friend->friend_id;
  }
  $data=[];
  foreach($friend_id as $friend)
  {
    $data[]=User::find($user_id)->get()->posts;
  }

return $data;

但它给了我那个错误

Property [posts] does not exist on this collection instance.

有没有办法解决这个问题

实际上,如果你使用 eloquent smart:

,一行就可以实现
$user = User::find($user_id);
$posts = Post::whereIn('users_id', $user->friends()->pluck('id'))->get()

return $posts;

如果 $user_id 是 auth 用户,那么您也可以使用它:

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

您首先必须获得您的用户: $user = Auth::user();

可以像这样检索用户朋友(最好是他们的 id):

$friend_ids = $user->friends()->pluck('id')

之后您需要将当前用户的id添加到id数组中:

$all_ids = array_push($friend_ids, $user->id)

最后您可以检索所有帖子:

$posts = Posts::whereIn('user_id', $all_ids)->get();