【发布时间】:2020-08-17 18:03:05
【问题描述】:
我想从三个不同的表格(如菜单、附加物品和交易)中将不同的物品添加到一个购物车中。
在给定的图片中,Chicken burger 来自菜单表并从 Additionalitems 表中获取番茄酱。
我可以添加多个项目,它是菜单表中的价格,但是当我重新使用相同的代码将附加项目表中的番茄酱等项目添加到购物车中时,它会将鸡肉汉堡而不是番茄酱添加到购物车中。
此外,当我创建另一个函数将番茄酱从附加项目表添加到同一个购物车中时,鸡肉汉堡已经添加了代码混合模型并且只将一个项目添加到购物车中,这取决于顺序。
我希望你们能理解我的问题,所以请指导我如何从三个不同的表中将多个项目添加到一个购物车中。
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 );
}
它是购物车模型中的添加功能
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;
}
【问题讨论】:
-
你能展示你的方法
$cart->add吗?因为我怀疑购物车中每件商品的 ID 存在问题。为什么 ?因为您正在从具有自己的 ID 处理的表格菜单中检索一条记录,并且对于表格 AdditionalItem 也是如此,这意味着在您的情况下,您购物车中的某些产品可以具有相同的 ID 而实际上不是相同的产品,这将解释您遇到的未定义行为,因为在某些情况下,您有两个 ID 为 1 和 2 的产品,但在另一种情况下,您有两个 ID 为 1 的产品。 -
@bjovanov 我添加了用于从菜单表中添加项目的添加功能。请检查一下
标签: php laravel e-commerce cart