1 回答

TA貢獻1813條經驗 獲得超2個贊
問題是您要進行很多查詢,并且速度不可避免地會很慢。該解決方案應該具有更好的性能,因為您只進行了兩次查詢。
$orders = orders::with(['orderDetails'])->get();
$now = Carbon::now();
$quantities = [];
foreach($orders as $order) {
$daysOld = $order->date->diffInDays($now);
foreach ($order->orderDetails as $details) {
if (!isset($quantities[$details->SKU])) {
$quantities[$details->SKU]['30'] = 0;
$quantities[$details->SKU]['60'] = 0;
$quantities[$details->SKU]['90'] = 0;
$quantities[$details->SKU]['120'] = 0;
$quantities[$details->SKU]['total'] = 0;
}
if ($daysOld <= 30) {
$quantities[$details->SKU]['30'] += $details->quantity;
}
if ($daysOld <= 60) {
$quantities[$details->SKU]['60'] += $details->quantity;
}
if ($daysOld <= 90) {
$quantities[$details->SKU]['90'] += $details->quantity;
}
if ($daysOld <= 120) {
$quantities[$details->SKU]['120'] += $details->quantity;
}
$quantities[$details->SKU]['total'] += $details->quantity;
}
}
return products::all()->map(function ($product) use ($quantities) {
$product->sales30days = $quantities[$product->asin]['30'];
$product->sales60days = $quantities[$product->asin]['60'];
$product->sales90days = $quantities[$product->asin]['90'];
$product->sales120days = $quantities[$product->asin]['120'];
$product->salesTotal = $quantities[$product->asin]['total'];
return $product;
});
- 1 回答
- 0 關注
- 155 瀏覽
添加回答
舉報