2017-08-14 21 views
0

postsコレクションと多対多の関係を持つauthorsコレクションがあります。 postsコレクションは、私がcategory分野で私の全体のposts収集・グループを通過する必要があるとも持っているなど、Laravel Mongo GroupBy効率的にカウントする

を、例えば、「サスペンス」、「ドラマ」、「アクション」することができ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

これを試してみてください:

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(); 
     }); 
}); 
関連する問題