[英]How to add multiple products into one cart from different tables
我想從三個不同的表(如菜單、附加項目和交易)中將不同的項目添加到一個購物車中。
在給定的圖片中,Chicken burger 來自菜單表並從附加項目表中獲取番茄醬。
我可以添加多個項目,它是菜單表中的價格,但是當我重新使用相同的代碼將附加項目表中的番茄醬等項目添加到購物車中時,它會將雞肉漢堡而不是番茄醬添加到購物車中。
此外,當我創建另一個 function 將番茄醬從附加項目表添加到同一個購物車中時,雞肉漢堡已經添加了代碼混合模型並且只將一個項目添加到購物車中,這取決於順序。
我希望你們理解我的問題,所以請指導我如何從三個不同的表中將多個項目添加到一個購物車中。
public function getAddToCart( Request $request, $id ) {
$product = Menu::find( $id );
$oldCart = Session::has( 'cart' ) ? Session::get( 'cart' ) : null;
$cart = new Cart( $oldCart );
$cart->add( $product, $product->id );
$request->session()->put( 'cart', $cart );
// dd($request->session()->get('cart'));
return redirect()->route( 'pages.menu', $id );
}
上面的代碼用於將菜單表中的項目(如雞肉漢堡)添加到購物車中,下面的代碼用於將附加項目表中的項目添加到購物車中,如番茄醬
public function getAddToNewCart( Request $request, $id ) {
$product = AdditionalItems::find( $id );
//dd($product);
$oldCart = Session::has( 'cart' ) ? Session::get( 'cart' ) : null;
$cart = new Cart( $oldCart );
$cart->add( $product, $product->id );
$request->session()->put( 'cart', $cart );
dd( $request->session()->get( 'cart' ) );
return redirect()->route( 'pages.menu', $id );
}
在購物車 model 中添加 function
public function add($item, $id){
$storedItem = ['qty'=>0,'price'=>$item->price,'item'=> $item];
if($this->items){
if(array_key_exists($id, $this->items)){
$storedItem = $this->items[$id];
}
}
$storedItem['qty'] ++;
$storedItem['price'] = $item->price * $storedItem['qty'];
$this->items[$id] = $storedItem;
$this->totalQty ++;
$this->totalPrice += $item->price;
}
這就是我的想法, menu
ID 和additional_items
表有問題,不能一起工作。
例如,如果您的menu
表如下所示:
+----+-----------+
| ID | Item |
+----+-----------+
| 1 | Hamburger |
+----+-----------+
你的additional_item
是這樣的:
+----+-----------+
| ID | Item |
+----+-----------+
| 1 | Ketchup |
| 2 | Fanta |
+----+-----------+
當您使用$card->add($product, $product->id)
添加漢堡包時,一切都會好起來的,因為只有一個ID
為 1 的項目。
但是,一旦您使用$card->add($product, $product->id)
添加番茄醬,因為番茄醬在additional_items
中的ID
為 1 並且由於這種情況,
if(array_key_exists($id, $this->items)){
$storedItem = $this->items[$id];
}
你的代碼就像:“好的,我已經知道這個項目,所以我只會增加qty
”,因為你在 Additional_items additional_items
ID 1 和menu
的 ID 1 之間沒有任何區別,這就是為什么你有這種奇怪的添加項目的行為不正確。 顯然,如果添加 Hamburger( ID
為 1)和 Fanta( ID
為 2),則不會出現問題,因為沒有 ID 覆蓋。
為了解決您的問題,您有多種解決方案:
首先,您可以只在每個表中使用一個 UUID,這樣您就可以在您的表之間共享一個唯一 ID,但這並不常見,老實說,這可能會在以后導致其他問題。
其次,這個解決方案對我來說看起來更好,是將您的 model 屬性$items
分為 2 個類別(每個表一個類別)。
public function add($item, $category){
$storedItem = ['qty'=>0,'price'=>$item->price,'item'=> $item];
if($this->items){
// To avoid undefined error
if (!array_key_exists($category, $this->items))
$this->items[$category] = [];
if(array_key_exists($item->id, $this->items[$category])){
$storedItem = $this->items[$category][$item->id];
}
}
$storedItem['qty'] ++;
$storedItem['price'] = $item->price * $storedItem['qty'];
$this->items[$category][$item->id] = $storedItem;
$this->totalQty ++;
$this->totalPrice += $item->price;
}
現在您可以像這樣調用您的方法add
:
$cart->add($product, 'menu');
$card->add($product, 'additional_item');
我不知道您如何在視圖中打印購物車,但顯然,您需要解決一些問題,但應該不難。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.