1

我想过滤这个$authors集合。

$authors = Author::get();

在我看来,我需要显示一个作者与多少本书有关。
我使用 .each() 合并countto$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;
               })

            });
4

1 回答 1

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

于 2017-05-28T11:19:09.043 回答