所以我有两张 table 。 订单
和OrderItems
。关系是每个Order可以有很多OrderItems(orderitem只是一个产品)。
订单项目表
id INT PRIMARY KEY
name TEXT
quantity INT
pack_value INT
order_id INT FOREIGN KEY REFERENCES ORDER_ID ON ORDERS TABLE
product_id INT FOREIGN KEY REFERENCES PRODUCT_ID ON PRODUCTS TABLE
订单表
order_id INT PRIMARY KEY
status TEXT
user_id INT FOREIGN KEY REFERENCES USER_ID ON USERS TABLE
一个订单可以有相同的 OrderItem 两次或仅一次。例如,如下所示,3 个项目但 2 个产品:
OrderItem(id=1, product_id=100, name="Pizza", quantity=2, pack_value=10, order_id=7)
OrderItem(id=2, product_id=100, name="Pizza", quantity=10, pack_value=1, order_id=7)
OrderItem(id=3, product_id=555, name="Olives", quantity=5, pack_value=1, order_id=7)
所以上面有 2 个 Pizza
条目,这是我得到的结果。但是我希望它只显示 Pizza
的 1 个条目,因为它是同一项目。以下是我想看到的内容:
OrderItem(product_id=100, name="Pizza", quantity=30, pack_value=1, order_id=7)
OrderItem(product_id=555, name="Olives", quantity=5, pack_value=1, order_id=7)
所以本质上,如果该项目仅存在一次,则不对其执行任何操作。如果存在两次,则使 pack_value=1
且数量为各个 quantity*pack_value
的总和。因此,在上面的示例中,数量变为 (2*10 + 10*1 = 30)
。
Controller 方法如下所示,所以这就是我想要执行此操作的地方:
public function showOrderDetails(Order $order){
return view('orders.show', compact('order'));
}
此外,Order
和 OrderItem
模型也具有用于关系的方法。例如,在订单模型中我有:
public function orderItems(){
return $this->hasMany(OrderItem::class, 'order_id');
}
谢谢,如果您需要任何额外信息,我可以提供。
最佳答案
SELECT name,
SUM(quantity * pack_value) AS quantity,
1 AS pack_value,
order_id
FROM order_items
GROUP BY name,
order_id;
使用它作为子查询将其他表合并到此代码中,或者根据需要将它们添加到 FROM 子句中(调整其输出列表和分组表达式)。
关于php - 如何合并和求和具有相同 ID 值的项目的某些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64168335/