2016-11-15 7 views
1

私はLaravel 5.3を使用していますが、現時点では複数のセクションを含む請求書を作成しています。これらのセクションは1つのテーブルからすべてのデータを返します。唯一の違いは、適切なセクションにソートされることを識別する「タイプ」の列です。セクションごとに、私は4つのクエリを呼び出します。行のデータ、数、合計を取得するための効率的なクエリ。 (atm 32クエリ)

現在、8つのセクションがあります。 8×4,32 SQLクエリ。

1つのセクションでは、このような4つのクエリがあります。

$records['data'] = Model::where('type', 'x1')->get(); 
$records['total_cost'] = Model::where('type', 'x1')->sum('cost'); 
$records['count'] = Model::where('type', 'x1')->count(); 
$records['total_duration'] = Model::where('type', 'x1')->sum('duration'); 

をそして私はすべてのセクションのために同じことを繰り返します。私はこれが正しい方法だとは思わない。

ここからどこに行くのかわかりません。

+1

1つのオプションは、 '合算[「データ」]' $レコードをそこに最後の3つのクエリを削除し、代わりにループすることですあなたが行くようにカウントします。私はLaravel(私はそれを使ったことがない)が、1つのクエリでこれら3つの集計をすべて実行する方法を持っていなければならないと確信しています。 [これは](http://stackoverflow.com/questions/18307355/how-to-average-multiple-columns-using-eloquent)正しい道にあなたを得るかもしれません。 –

答えて

0

は単純に、このために行く:)

$data = Model::groupBy('type')->get(); 

$totalCost = $count = $totalDuration = []; 

$types = ['x1', 'x2']; 

foreach($types as $type) { 
    $totalCost[$type] = $data[$type]->sum('cost'); 
    $count[$type] = $data[$type]->count(); 
    $totalDuration[$type] = $data[$type]->sum('duration'); 
} 

つのクエリのみ:)

+0

'get()'の後に 'groupdBy( '​​type')'を移動しました - うまくいきます!私はたくさんの汚れたhahaを感じる:)ありがとう。 – Spacemudd

+0

@Spylot喜んで:) – prateekkathal

関連する問題