Level 70
@v9द Have you tried with subquery?
For example:
$result = DailyTransaction::select(
DB::raw('MONTH(transaction_date) AS transMonth'),
DB::raw('YEAR(transaction_date) AS transYear'),
DB::raw('SUM(CASE WHEN action_types = 0 THEN amount ELSE 0 END) AS totalSales'),
DB::raw('SUM(CASE WHEN action_types = 1 THEN amount ELSE 0 END) AS totalPurchase'),
DB::raw('SUM(CASE WHEN action_types = 2 THEN amount ELSE 0 END) AS totalExpanse'),
DB::raw('SUM(CASE WHEN action_types = 3 THEN amount ELSE 0 END) AS totalReturns'),
DB::raw('SUM(CASE WHEN action_types = 4 THEN amount ELSE 0 END) AS totalSalary')
)
->where(function ($query) use ($yearMonths) {
foreach ($yearMonths as $year => $months) {
$query->orWhere(function ($query) use ($year, $months) {
$query->whereYear('transaction_date', $year)
->whereIn(DB::raw('MONTH(transaction_date)'), $months);
});
}
})
->groupBy('transMonth', 'transYear')
->get();
return $result;
Ref: https://reinink.ca/articles/calculating-totals-in-laravel-using-conditional-aggregates
2 likes