结账后减少数据库中的产品数量

时间:2017-07-31 07:10:44

标签: laravel-5.2 e-commerce store

我的网上商店有购物车,到目前为止一切都很完美,但我说当我尝试将产品数量减少到产品时,我数据库中的所有产品都将减少不仅仅是购物车中的产品。

这是我的ordercontroller:

public function postOrder(Request $request) {    
    $validator = Validator::make($request->all(), [
        'first_name' => 'required|max:30|min:2',
        'last_name'  => 'required|max:30|min:2',
        'address'    => 'required|max:50|min:4',
        'address_2'  => 'max:50|min:4',
        'city'       => 'required|max:50|min:3',
        'state'      => 'required|',
        'zip'        => 'required|max:11|min:4',
        'full_name'  => 'required|max:30|min:2',
    ]);

    if ($validator->fails()) {
        return redirect('/checkout')
            ->withErrors($validator)
            ->withInput();
    }

    $first_name = Input::get('first_name');
    $last_name = Input::get('last_name');
    $address = Input::get('address');
    $address_2 = Input::get('address_2');
    $city = Input::get('city');
    $state = Input::get('state');
    $zip = Input::get('zip');
    $full_name = Input::get('full_name');        
    $user_id = Auth::user()->id;
    $cart_products = Cart::with('products')->where('user_id', '=', $user_id)->get();
    $cart_total = Cart::with('products')->where('user_id', '=', $user_id)->sum('total')        
    $charge_amount = number_format($cart_total, 2) * 100;        
    $order = Order::create (
        array(
            'user_id'    => $user_id,
            'first_name' => $first_name,
            'last_name'  => $last_name,
            'address'    => $address,
            'address_2'  => $address_2,
            'city'       => $city,
            'state'      => $state,
            'zip'        => $zip,
            'total'      => $cart_total,
            'full_name'  => $full_name,
        ));

    foreach ($cart_products as $order_products) {
        $order->orderItems()->attach($order_products->product_id, array(
            'qty'    => $order_products->qty,
            'price'  => $order_products->products->price,
            'reduced_price'  => $order_products->products->reduced_price,
            'total'  => $order_products->products->price * $order_products->qty,
            'total_reduced'  => $order_products->products->reduced_price * $order_products->qty,
        ));
    }

// in the fact all product will decrement Not just products in cart
    \DB::table('products')->decrement('product_qty', $order_products->qty);

    Cart::where('user_id', '=', $user_id)->delete();

    flash()->success('Success', 'Your order was processed successfully.');

    return redirect()->route('cart');

}

我使用程序\DB::table('products')->decrement('product_qty', $order_products->qty);;来减少,但实际上所有产品都会减少不仅仅是购物车中的产品

1 个答案:

答案 0 :(得分:0)

您使用的user_id product_name 1 Apple 1 Banana 1 Apple 2 Carrot 2 Tomato 2 Carrot 2 Tomato 3 Milk 3 Cucumber 会更新所有记录,因为您没有将其限制为特定记录。你想在你的循环中这样做:

user_id  product_name Product_Count_per_User
1        Apple        1 
1        Banana       2
2        Carrot       2
2        Tomato       2
3        Milk         1
3        Cucumber     1