0

我正在尝试优化此代码,因为它会导致超时问题。

它从数据库中获取所有项目并在 PHP 中执行 SUM()。

public function getInstalledCost()
{
  $items = $this->stockItems()
                              ->where('status', 'INSTALADO')
                              ->with(['shipment' => function($q){ $q->select('id', 'item_cost'); }])
                              ->select('id','shipment_id')
                              ->get();

  $cost = 0;
  foreach($items as $i){
    $cost += $i->shipment->item_cost;
  }

  return $cost;
}

那么有没有办法从数据库中获取这些数据已经 SUM() ?

4

1 回答 1

2

在 Laravel 中对集合求和可以使用以下sum()方法写得更短

$items->sum(function ($item) {
    return count($item['item_cost']);
});

只是作为以后的提示。

总结一个关系的领域,你可能会做某事。喜欢

StockItem::whereHas('shipment', function ($q) use ($shipmentId) {
  $q->where('shipment_id', $shipmentId);
})->sum('shipments.item_price');

我假设您已经正确设置了 和 之间的关系stockItems,并且在您的模型上shipments有一个关系。shipmentsStockItem

于 2021-01-26T23:26:03.627 回答