我为我的"公告"设置了一对多关系。有很多"评论"。
目前,当我的用户加载应用页面时,我发送了30条最近的公告:
Route::get('/app', function () {
$posts = Announcement::take(30)->orderBy('id', 'desc')->get();
return View::make('app')->with([
//posts
'posts' => $posts,
//orders
'orders' => $orders
]);
}
当我通过$ posts对象使用foreach循环回显刀片中的公告时,我想在相应帖子下回应每个帖子的评论。
是否可以将帖子的评论作为实际帖子对象的一部分传递?例如,如果我能做到这一点会很好:
@foreach ($posts as $post)
//echo out the post
{{$post->content}}
//echo out the comments relating to this post
{{$post->comments}}
@endforeach
答案 0 :(得分:1)
您可以为评论添加另一个foreach
,如下所示:
@foreach ($posts as $post)
//echo out the post
@if($post->comments->count())
@foreach ($post->comments as $comment)
// {{ $comment }}
@endforeach
@endif
@endforeach
答案 1 :(得分:1)
当你向他们展示你的评论(你应该)时,它会循环你的评论,它会对每个评论做出不同的查询。所以,如果你有50条评论,那就多了50条评论。
您可以使用预先加载
来缓解这种情况 $posts = Announcement::with('comments')
->take(30)->orderBy('id', 'desc')
->get();
然后按照他向你展示的方式循环。这会将查询限制为2。您可以在此处阅读以下文档中的更多内容:https://laravel.com/docs/5.4/eloquent-relationships#eager-loading