2017-08-01 93 views
0

在我的岗位型号属性[***]不能在此集合实例Laravel雄辩关系存在

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; 

但它显示

属性[注释]在此收集实例中不存在。

回答

2

因此,用户has many posts因此返回一个集合,您将需要遍历此以获取您的评论。即

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

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

documentation on Laravel Collections

0

我想你可以试试这个:

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

$postComment = array(); 

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

希望这有助于为你!

0

如果你想拥有所有评论,你可以使用下面的代码:

$comments = []; 

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

return $comments; 
0

地产[评论]不会对这种集合实例存在。

发生上述错误是因为Posts函数返回一个集合。现在您将不得不遍历集合中的每个元素。因为您正在返回$ user-> posts() - > comment,我假设您需要它以数组的形式,并且不必一个接一个地将它们回显出来。所以你可以将它们全部存储在一个数组中&然后处理它,无论你喜欢什么。

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

进行更深入,这个集合函数read: https://laravel.com/docs/5.4/collections#method-each