【发布时间】:2021-01-17 22:35:16
【问题描述】:
所以我有 2 张桌子。 Orders 和 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)
所以上面有两个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)。
控制器方法如下所示,所以我要这样做:
public function showOrderDetails(Order $order){
return view('orders.show', compact('order'));
}
Order 和 OrderItem 模型也有关系的方法。例如,在订单模型中,我有:
public function orderItems(){
return $this->hasMany(OrderItem::class, 'order_id');
}
谢谢,如果您需要任何额外的信息,我可以提供。
【问题讨论】:
-
同享 db fiddle
-
小提琴中没有
pack_value,插入你提到的示例数据 -
下面是我想看到的解释
quantity=2和quantity=10是如何折叠成quantity=30的... -
@Akina
(2*10 + 10*1 = 30)当 2 个项目相同时,它是每个项目的quantity*pack_value的总和。该值可以是 1(单件出售)或多个(多件装)
标签: php mysql laravel eloquent