我想过滤这个$authors
集合。
$authors = Author::get();
在我看来,我需要展示作者有多少本书
我使用.each()将count
合并到$authors
并将其返回到调用它的位置。
return $authors->each(function($author, $key){
$author->count = Author::findOrFail($author->id)->books()->count();
});
问题是“如果作者没有写任何一本书(计数< = 0),我如何删除/过滤?”
我试过这是失败了。
return $authors->each(function($author, $key){
$author->count = Author::findOrFail($author->id)->books()->count();
$author->filter(function($author, $key){
return $author->count <= 0;
})
});
答案 0 :(得分:1)
您应该使用withCount()
来避免N+1和性能问题:
$authors = Author::withCount('books')->get();
在Blade视图中,您将能够:
$author->books_count
如果您想要计算关系中的结果数而不实际加载它们,您可以使用
withCount
方法,该方法会在结果模型上放置{relation}_count
列。
https://laravel.com/docs/5.4/eloquent-relationships#counting-related-models