此集合实例Laravel雄辩关系中不存在属性[***]

时间:2017-08-01 06:51:35

标签: laravel eloquent

在我的帖子模型中

public function user()
{
    return $this->belongsTo('App\User');
}

在用户模型中

public function posts()
{
    return $this->hasMany('App\Post');
}

现在我正在尝试获取特定用户的评论

$user= User::where('name', 'like', '%Mat%')->first();
return $user->posts->comment;

但它显示

  

此集合实例上不存在属性[comment]。

4 个答案:

答案 0 :(得分:3)

因此返回集合的用户has many posts,您需要循环显示该集合以获取您的评论。即

$user = User::where('name', 'like', '%Mat%')->first();

$user->posts->each(function($post) {
    echo $post->comment;
});

请参阅documentation on Laravel Collections

答案 1 :(得分:0)

我想你可以试试这个:

$user= User::with('post')->where('name', 'like', '%Mat%')->get();

$postComment = array();

foreach($user->post as $post){
  $postComment = $post->comment;
}
return $postComment;

希望对你有所帮助!!!

答案 2 :(得分:0)

如果您想要所有条评论,可以使用以下代码:

$comments = [];

$user = User::where('name', 'like', '%Mat%')->with(['post.comment' => function($query) use (&$comments) {
    $comments = $query->get();
}])->first();

return $comments;

答案 3 :(得分:0)

  

此集合实例上不存在属性[comment]。

发生上述错误是因为Posts函数返回一个集合。现在,您将不得不遍历集合中的每个元素。

因为,你要返回$ user-> posts() - > comment,我假设你需要以数组的形式,并且不必简单地将它们一个接一个地回显。因此,您可以将它们全部存储在一个阵列中。然后处理它你喜欢什么。

$comments = array();
$user->posts()->each(function $post){
    $comments = $post->comment;
}
return $comments;

为了更深入的了解,请参阅此集合函数: https://laravel.com/docs/5.4/collections#method-each