【问题标题】:Property [posts] does not exist on this collection instance laravel此集合实例 laravel 上不存在属性 [posts]
【发布时间】:2021-07-23 01:04:33
【问题描述】:

我有三张桌子

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

我想显示登录用户和他所有朋友的所有帖子。 为了获得登录用户的帖子,我做到了

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

但无法获取我尝试过的所有朋友的帖子

$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.

有没有什么可以逃避这个问题的

【问题讨论】:

标签: laravel eloquent-relationship


【解决方案1】:

您首先必须让您的用户: $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();

【讨论】:

    【解决方案2】:

    其实,如果你使用 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()
    

    【讨论】:

    • 如果您的问题得到解答,请不要犹豫,投票并点击绿色勾号。 @راجہ سفیان
    猜你喜欢
    • 2020-07-11
    • 2019-07-10
    • 2021-09-07
    • 2019-04-08
    • 2023-03-12
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多