だから私は2つのテーブルを持っています。Orders
およびOrderItems
。関係は、各注文が多くのOrderItemを持つことができるということです(orderitemは単なる製品です)。
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を2回または1回だけ持つことができます。たとえば、以下のように、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)
したがって、基本的に、アイテムが1回だけ存在する場合は、何もしません。それが2回存在する場合は、を作成し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');
}
ありがとう、そしてあなたが私が提供できる追加情報が必要な場合。
SELECT name,
SUM(quantity * pack_value) AS quantity,
1 AS pack_value,
order_id
FROM order_items
GROUP BY name,
order_id;
サブクエリとして使用して別のテーブルをこのコードにマージするか、必要に応じてそれらをFROM句に追加します(出力リストとグループ化式を調整します)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加