[英]How can I calculate total price of an invoice?
我有兩個三張桌子:
// invoices
+----+----------------+
| id | invoice_code |
+----+----------------+
| 1 | d09823r230r4 |
| 2 | 34tf354f45tf |
+----+----------------+
// commodities
+----+-------------+------------+--------+
| id | invoice_id | product_id | number |
+----+-------------+------------+--------+
| 1 | 1 | 1 | 2 |
| 2 | 1 | 3 | 4 |
+----+-------------+------------+--------+
-- number columns is the number of each ordered product in the invoice
// products
// invoices
+----+-----------+---------+
| id | name | price |
+----+-----------+---------+
| 1 | SFX-300 | 15000 |
| 2 | GB32-b10 | 2000 |
| 3 | SVX-m30 | 1200 |
+----+-----------+---------+
我需要做的就是計算發票的總價。 這是計算發票x
總價的公式:
$total_invoice_price = 0;
foreach( $invoice_x->commodities as $commodity){
$total_invoice_price += ( $commodity.number * <products.price> )
}
echo $total_invoice_price;
問題在於獲取<products.price>
。 它需要再加入一個products
表。 知道如何使用Laravel關系來做到這一點嗎?
如果您只需要總價,則可以在帶有聚合語句的純sql中完成,並在三個表之間進行聯接。
SELECT invoice.invoice_code, SUM(product.price * commodities.number)
FROM invoice
JOIN commodities ON invoice.id = commodities.invoice_id
JOIN product ON product.id = commodities.product_id
GROUP BY invoice.id
要保存查詢,您應該使用“ with()”來希望加載您希望加入的模型。
我不確定您如何命名模型以及模型之間的鏈接程度。
讓我們假設它是以傳統方式完成的。
這是腳本。
$total_invoice_price = $invoice_x->commodities
->with('products')
->get()
->map(function ($commodity) {
return $commodity->number * $commodity->product->price;
})
->sum();
我所做的是將產品與每種商品結合在一起之后。 我執行get()獲得商品集合。 從集合中,我們在每個商品上進行映射,並返回產品的number
和price
。 然后,我們乘以並返回為每個商品記錄的總和。 之后,我們將所有總計加到總計,並得到您的結果。
我編寫的代碼未經測試,因此請嘗試將其調整為適合您的代碼。
請在下面查詢
$invoices_total = DB::table('invoices')
->join('products', 'invoices.id', '=', 'commodities.invoice_id')
->join('commodities', 'products.id', '=', 'commodities.product_id')
->sum('products.price * commodities.number')
->groupBy('invoices.id')
->get();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.