DB의 데이터만으로 계산할 수 있는 결과물이라면, DB 쿼리를 이용하는 것이 성능 측면에서 좋습니다. 공식 문서나 웹 상에서 DB::raw()를 찾아보시면 될 듯 합니다.
반면 DB 쿼리만으로 값을 계산할 수 없는 경우에는, PHP 측에서 CPU와 메모리를 이용해서 루프를 돌면서 계산하는데요. 대략 이런 식이 될 겁니다.
$lineItems = OrderLine::query()->whereOrderId(1234)->get(); $totalAmount = $lineItems->recude(function (int $carry, OrderLine $lineItem) { return $carry + (($lineItem->price - $lineItem->discount_amount)* $lineItem->quantity); }, 0);
수량과 판매금액 할인 금액을 모두 계산한 총 합을 구하고 싶습니다.
쿼리로 예를 들면
SELECT SUM(price * quantity) - SUM(discount_amount * quantity) WHERE ORDER_ID = 1234
이런식의 쿼리가 되는데 이걸 eloquent로 표현할 수 있을까요?
안되면 get()으로 가져온 후 foreach로 계산을 해야 할까요?