首页 > 解决方案 > 仅基于 ID 限制添加到购物车的商品数量,即使键具有 ID 和连接值

问题描述

客户在将商品添加到购物车时可以选择商店。即使一个产品可能与多个出口相关联,该产品也只有 1 个 ID。如果用户要将相同的产品添加到购物车,但选择 3 个单独的分支,则它只会在购物车中添加 1 行,数量为 3。这不是它应该如何工作的,所以我将我的 ID 与出口 ID 连接起来这样即使是同一产品,购物车中也会出现 3 个单独的项目。这很好用,但是当库存不足时,我的问题就出现了。

假设库存只有 1 件。如果我将它添加到购物车并选择一个特定的出口,它就会添加到购物车中。如果您再次执行此操作并选择另一个分支,则不应将其添加到购物车中,因为手头只有一个。然而,它让我为每个选择的不同分支添加 1。无论我尝试选择多少个不同的网点,它都应该只让我加 1。

   $key = "{$prod_id}.{$outlet_id}";
       if (empty($_SESSION['cart_array'][$key])) {
         $_SESSION['cart_array'][$key] = array(
            'prod_id'    => $prod_id,
            'outlet_id'  => $outlet_id,
            'quantity'   => $quantity,
            'prod_name'  => $data['prod_name'],
            'sale_price' => $data['sale_price'],
            'sp_name'    => $data['sp_name'],
            'outlet_name' => $data['outlet_name']

         );

           $response['success'] = true;
           $response['message'] = 'Product added to cart.';
       }

       elseif($_SESSION['cart_array'][$key]['quantity'] >= $data['numVouchersLeft']) {

           $response['success'] = false;
           $response['message'] = 'Insufficient stock. Cannot add to cart.';

       } else {

             $_SESSION['cart_array'][$key]['quantity'] += $quantity;
             $response['success'] = true;
             $response['message'] = 'Product added to cart.';
       }

这也许是需要改变的路线?

elseif($_SESSION['cart_array'][$key]['quantity'] >= $data['numVouchersLeft']) {

更新:

我试过这个,但由于某种原因,如果我从 2 个不同的商店添加相同的产品,$_SESSION['cart_array_products] 的数量会回到 1

 $key = "{$prod_id}.{$outlet_id}";
$keytwo = $prod_id;


           if (empty($_SESSION['cart_array'][$key])) {
             $_SESSION['cart_array'][$key] = array(
                'prod_id'    => $prod_id,
                'outlet_id'  => $outlet_id,
                'quantity'   => $quantity,
                'prod_name'  => $data['prod_name'],
                'sale_price' => $data['sale_price'],
                'sp_name'    => $data['sp_name'],
                'outlet_name' => $data['outlet_name']

             );

             $_SESSION['cart_array_products'][$keytwo] = array(
                 'prod_id' => $prod_id,
                 'quantity2' => $quantity
             );



               $response['success'] = true;
               $response['message'] = 'Product added to cart.';
           }

           elseif($_SESSION['cart_array'][$key]['quantity'] >= $data['numVouchersLeft'] || $_SESSION['cart_array_products'][$keytwo]['quantity2'] >= $data['numVouchersLeft']) {

               $response['success'] = false;
               $response['message'] = 'Insufficient stock. Cannot add to cart.';

           } else {

                 $_SESSION['cart_array'][$key]['quantity'] += $quantity;
                 $_SESSION['cart_array_products'][$keytwo]['quantity2'] += $quantity;
                 $response['success'] = true;
                 $response['message'] = 'Product added to cart.';
           }

标签: php

解决方案


我设法像这样解决它,但如果有人有更好或更优雅的方法,请告诉我:

if(empty($_SESSION['cart_array'][$key])) {
    $_SESSION['cart_array'][$key] = array(
        'prod_id'     => $prod_id,
        'outlet_id'   => $outlet_id,
        'quantity'    => $quantity,
        'prod_name'   => $data['prod_name'],
        'sale_price'  => $data['sale_price'],
        'sp_name'     => $data['sp_name'],
        'outlet_name' => $data['outlet_name']

    );

} elseif($_SESSION['cart_array_products'][$keytwo]['quantity'] < $data['numVouchersLeft']) {

    $_SESSION['cart_array'][$key]['quantity'] += $quantity;
    $response['success'] = true;
    $response['message'] = 'Product added to cart.';      

} else {

    $response['success'] = false;
    $response['message'] = 'Not enough stock to add item to cart.';
}

if(empty($_SESSION['cart_array_products'][$keytwo])) {
    $_SESSION['cart_array_products'][$keytwo] = array(
        'prod_id'  => $prod_id,
        'quantity' => $quantity
    );

    $response['success'] = true;
    $response['message'] = 'Product added to cart.';

} elseif($_SESSION['cart_array_products'][$keytwo]['quantity'] >= $data['numVouchersLeft']) {

    $response['success'] = false;
    $response['message'] = 'Not enough stock to add item to cart.';

} else {

    $_SESSION['cart_array_products'][$keytwo]['quantity'] += $quantity;
    $response['success'] = true;
    $response['message'] = 'Product added to cart.';
}

推荐阅读