如何计算发票的总价?

时间:2018-07-26 09:42:40

标签: php laravel

我有两个三个表:

// 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关系来做到这一点吗?

3 个答案:

答案 0 :(得分:2)

如果您只需要总价,则可以在带有聚合语句的纯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

答案 1 :(得分:1)

要保存查询,您应该使用希望加入的模型“ with()”来急于加载。

我不确定您如何命名模型以及模型之间的链接程度。

让我们假设它是以传统方式完成的。

这是脚本。

$total_invoice_price = $invoice_x->commodities
                                 ->with('products')
                                 ->get()
                                 ->map(function ($commodity) {
                                     return $commodity->number * $commodity->product->price;
                                 })
                                 ->sum();

我要做的是将产品与每种商品结合在一起之后。我执行get()获得商品集合。从集合中,我们确实映射了每种商品并返回了产品的numberprice。然后,我们乘以并返回为每个商品记录的总和。之后,我们将所有总计加到总计,并得到您的结果。

我编写的代码未经测试,因此请尝试将其调整为适合您的代码。

答案 2 :(得分:0)

请在下面的查询中检查

1<= N <= 100,000
1<= A[i], B[i] <= 100,000,000