LoginSignup
0
0

More than 5 years have passed since last update.

laravelのクエリービルダーで取得したコレクションについて重複行を削除し、値を合計する

Posted at

やること

同じ日付で売り上げが異なるレコードが複数あるので、重複日の売り上げ高を合計して日付の重複を削除した新しい配列を作る。


//DBからリストを取得。日付の早い順に並び替え
$dates = List::orderBy('date','asc')->get();

//初期設定
$count = $dates->count(); //ループの基準になるレコード総数の取得
$sum_sales = 0; //日付合計の初期化
$date = $dates[0]->history_date; //基準日に初期値を設定
$sales_days = []; //出力用の配列初期化

//集計
for ($i=0; $i < $count; $i++) {
    //日付と売上を一時保存
    $tmp_date = $dates[$i]->history_date;
    $tmp_sales = intval($dates[$i]->sales);
    //同一日、または最終レコードか確認
    if ($tmp_date != $date or $i == $count - 1) {
        //異なる日付だったら出力配列に格納。ついでにcarbonでフォーマット
        $sales_days[] = [$date->format('Y/n/j'),$sum_sales];
        //基準日、合計の初期化
        $date = $tmp_date;
        $sum_sales = $tmp_sales;
    } else {
        //同一日だったら集計
        $sum_sales += $tmp_sales;
    }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0