groupBy(function($payment){ /** @var Payment $payment */ return $payment->created_at->month; })->map(function($payments){ return $payments->sum('amount'); }); } public function reports() { $today = Carbon::today(); $paymentsInThisYear = Payment::whereBetween( 'created_at', [$today->startOfYear()->toDateTimeString(), $today->endOfYear()->toDateTimeString()] )->get(); $thisYearPaymentGroup = $this->groupAndSumPaymentsByYear($paymentsInThisYear); $lastYearToday = $today->clone()->modify('-1 year'); $paymentsInLastYear = Payment::whereBetween( 'created_at', [$lastYearToday->startOfYear()->toDateTimeString(), $lastYearToday->endOfYear()->toDateTimeString()] )->get(); $lastYearPaymentGroup = $this->groupAndSumPaymentsByYear($paymentsInLastYear); $data = [ 'thisYearPaymentGroup' => [ 'values' => $thisYearPaymentGroup->toArray(), 'year' => $today->year, 'sum' => $thisYearPaymentGroup->sum(), ], 'lastYearPaymentGroup' => [ 'values' => $lastYearPaymentGroup->toArray(), 'year' => $lastYearToday->year, 'sum' => $lastYearPaymentGroup->sum(), ], ]; return view('reports', ['data' => $data]); } }