hakanylmz Hafta için şu şekilde günleri alabilirsiniz:
$startDate = today()->startOfWeek();
$endDate= today()->endOfWeek();
$salesByWeek = Sale::selectRaw('DATE(operation_date) AS op_date, SUM(payment_amount) AS total')
->whereBetween('operation_date', [$startDate, $endDate])
->where(function($query) {
$query->where('message', 'ODEME YAPILDI')
->orWhere('message', 'TUMUNU ODE BASARILI');
})
->groupBy('op_date')
->orderBy('operation_date')
->pluck('total', 'op_date')
->toArray();
Bu size şöyle bir sonuç verir:
{
"2023-05-08": 550,
"2023-05-10": 669.59
}
Sadece 8'i ile 10'unda ödeme yapılmış, o yüzden diğer günler gelmez. Diğer günleri 0 olarak eklemek SQL tarafında sorguyu biraz karmaşık hale getireceği için bunu PHP ile yapabiliriz. Mesela:
CarbonPeriod::create($startDate, '1 day', $endDate)
->forEach(function($d) use (&$salesByWeek) {
$day = $d->toDateString();
if(!isset($salesByWeek[$day])) {
$salesByWeek[$day] = 0;
}
});
ksort($salesByWeek);
$salesByWeek:
{
"2023-05-08": 550,
"2023-05-09": 0,
"2023-05-10": 669.59,
"2023-05-11": 0,
"2023-05-12": 0,
"2023-05-13": 0,
"2023-05-14": 0
}