我有一个authors
集合,与posts
集合有多对多的关系。 posts
集合有一个category
字段,例如," Suspense"," Drama"," Action"等等。
我需要通过posts
字段浏览整个category
集合和分组,并且还有相关的计数。
这是我到目前为止所做的:
$authors = Author::where('active', true)->get();
foreach ($authors as $author){
foreach ($author->posts()->groupBy('category')->get() as $data){
// Do some logic
}
}
基本上我期望的输出是一个数组,category
作为键,计数作为值。因此,如果我$a['Drama']
,它会让我知道作者写了一篇具有该类别的帖子的次数。
我可以通过上面的循环逻辑来解决这个问题,但它看起来效率不高。我应该看看聚合吗?如果是这样,有人可以让我开始吗?
答案 0 :(得分:0)
试试这个:
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
$authors = DB::collection('authors')
->where('active', true)
->get();
// Laravel >= 5.3 would return collection instead of plain array
$authors = is_array($authors) ? Collection::make($authors) : $authors;
$authors->map(function ($author) {
return $author
->posts()
->groupBy('category')
->get()
->map(function ($collection) {
return $collection->count();
});
});