Merhaba,
Bir grafiğim var. Ocak ayından başlamak üzere toplam 12 data ekletmem gerekiyor. Örnek data çıktısı ocak ayından başlamak üzere;
$monthlyData = [5,6,9,8,7,25,36,14,20,9,3,6];
Yukarıdaki çıktı benim için yeterli fakat bunu laravel'de yapmak veya genel olarak yapmak biraz kod tekrarına sebep olur mu? İstediğim şartlar şunlar:
shipped_date bugünden 14 gün önce olmalı.
son bir yıl içerisindeki veriler olmalı.
İşte yaptığım örnek; (işe yarıyor ama bundan toplam 12 tane oluşturmak bana kod tekrar gibi geldi)
$monthlyData = [];
$novemberMonth = OrderDetail::with('orderItems')
->when(!$request->user()->hasRole('owner'), function ($query) use ($request) {
return $query->where('seller_id', $request->user()->parent_id);
}, function ($query) use ($request) {
return $query->where('seller_id', $request->user()->id);
})
->where('status', '=', 'delivered')
->whereDate('shipped_date', '>', Carbon::now()->addDays(14))
->whereMonth('created_at', '=', 11)
->whereBetween('created_at',
[Carbon::now()->subYear(), Carbon::now()]
)
->get();
$decemberMonth = OrderDetail::with('orderItems')
->when(!$request->user()->hasRole('owner'), function ($query) use ($request) {
return $query->where('seller_id', $request->user()->parent_id);
}, function ($query) use ($request) {
return $query->where('seller_id', $request->user()->id);
})
->where('status', '=', 'delivered')
->whereDate('shipped_date', '>', Carbon::now()->addDays(14))
->whereMonth('created_at', '=', 12)
->whereBetween('created_at',
[Carbon::now()->subYear(), Carbon::now()]
)
->get();
$novemberTotal = 0;
foreach ($novemberMonth as $november) {
foreach ($november->orderItems as $item) {
$novemberTotal += $item->price * $item->qty;
}
}
$decemberTotal = 0;
foreach ($decemberMonth as $december) {
foreach ($december->orderItems as $item) {
$decemberTotal += $item->price * $item->qty;
}
}
array_push($monthlyData, $novemberTotal);
array_push($monthlyData, $decemberTotal);
Daha kısa bir yol, mantık var mı yapabilir miyiz?
Düzeltme;
Böyle bir şey düşündüm ne kadar sağlıklı? İşe yarar mı?
$monthlyData = [];
for($i=1; $i<13; $i++) {
$monthlyQuery = OrderDetail::with('orderItems')
->when(!$request->user()->hasRole('owner'), function ($query) use ($request) {
return $query->where('seller_id', $request->user()->parent_id);
}, function ($query) use ($request) {
return $query->where('seller_id', $request->user()->id);
})
->where('status', '=', 'delivered')
->whereDate('shipped_date', '>', Carbon::now()->addDays(14))
->whereMonth('created_at', '=', $i)
->whereBetween('created_at',
[Carbon::now()->subYear(), Carbon::now()]
)
->get();
$monthlyTotal = 0;
foreach ($monthlyQuery as $month) {
foreach ($month->orderItems as $item) {
$monthlyTotal += $item->price * $item->qty;
}
}
array_push($monthlyData, $monthlyTotal);
}