我有两个三个表:
// 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关系来做到这一点吗?
答案 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()获得商品集合。从集合中,我们确实映射了每种商品并返回了产品的number
和price
。然后,我们乘以并返回为每个商品记录的总和。之后,我们将所有总计加到总计,并得到您的结果。
我编写的代码未经测试,因此请尝试将其调整为适合您的代码。
答案 2 :(得分:0)
请在下面的查询中检查
1<= N <= 100,000
1<= A[i], B[i] <= 100,000,000