簡體   English   中英

如何計算發票的總價?

[英]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()獲得商品集合。 從集合中,我們在每個商品上進行映射,並返回產品的numberprice 然后,我們乘以並返回為每個商品記錄的總和。 之后,我們將所有總計加到總計,並得到您的結果。

我編寫的代碼未經測試,因此請嘗試將其調整為適合您的代碼。

請在下面查詢

$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM