Cannot update Stock Item Quantity for a Product in Magento 1.6.2

前端 未结 4 389
感动是毒
感动是毒 2020-12-16 06:25

I am trying to update the stock quantities of products in Magento from within a script.

I load the product, set the stock quantity, and save - but the quantity remai

相关标签:
4条回答
  • 2020-12-16 07:00

    I've solved it myself:

    // get stock data
    $stockData = $product->getStockItem();
    printf(PHP_EOL.'Stock: qty=%d, instock=%s, man_stock=%s, use_cfg_man_stock=%s'.PHP_EOL,
        $stockData->getData('qty'),
        $stockData->getData('is_in_stock'),
        $stockData->getData('manage_stock'),
        $stockData->getData('use_config_manage_stock')
    );
    // prints out qty=0, instock=, man_stock=, use_cfg_man_stock=
    
    
    // $stockQty = 1
    $stockItem = Mage::getModel('cataloginventory/stock_item');
    $stockItem->assignProduct($product);
    $stockItem->setData('is_in_stock', 1);
    $stockItem->setData('stock_id', 1);
    $stockItem->setData('store_id', 1);
    $stockItem->setData('manage_stock', 0);
    $stockItem->setData('use_config_manage_stock', 0);
    $stockItem->setData('min_sale_qty', 0);
    $stockItem->setData('use_config_min_sale_qty', 0);
    $stockItem->setData('max_sale_qty', 1000);
    $stockItem->setData('use_config_max_sale_qty', 0);
    $stockItem->setData('qty', $stockQty);
    $stockItem->save();
    
    $product->save();                           
    $product->load();                           
    $stockData = $product->getStockItem();
    printf('New Stock: qty=%d, instock=%s, man_stock=%s, use_cfg_man_stock=%s'.PHP_EOL,
        $stockData->getData('qty'),
        $stockData->getData('is_in_stock'),
        $stockData->getData('manage_stock'),
        $stockData->getData('use_config_manage_stock')
    );
    // prints out qty=1, instock=1, man_stock=0, use_cfg_man_stock=0
    

    By creating a new StockItem, and assigning that to the product. Hope this helps someone else.

    0 讨论(0)
  • 2020-12-16 07:04

    All you were missing is to save the $stockItem. You shouldn't need to create a new stock_item nor should you have to save the product.

    if (!($stockItem = $product->getStockItem())) {
        $stockItem = Mage::getModel('cataloginventory/stock_item');
        $stockItem->assignProduct($product)
                  ->setData('stock_id', 1)
                  ->setData('store_id', 1);
    }
    $stockItem->setData('qty', $stockQty)
              ->setData('is_in_stock', $stockQty > 0 ? 1 : 0)
              ->setData('manage_stock', 1)
              ->setData('use_config_manage_stock', 0)
              ->save();
    
    0 讨论(0)
  • 2020-12-16 07:06

    In my case I got the same problem with products that I've imported programmatically. I just realized that I forgot to add stock_data in the array...

    'name' => $productName,
    'stock_data' => array(
                            'use_config_manage_stock' => 0,
                            'manage_stock' => 0,
                            'qty' => 0,
                            'stock_id' => 1,
                            'min_qty' => 0,
                        )
    

    Without stock data information, Magento generates an exception(at \Mage_CatalogInventory_Model_Stock_Item) when adding product to cart.

    With this node, it works. =)

    0 讨论(0)
  • 2020-12-16 07:15

    To display stock quantity for the product -

     <?php echo $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product); ?>
    

    And if you want to display individual data use this -

    <?php echo $stock->getQty(); ?> // Will display stock quantity
    <?php echo $stock->getMinQty(); ?> // Will display minimum quantity
    <?php echo $stock->getMinSaleQty(); ?> //will display minimum salable quantity
    
    0 讨论(0)
提交回复
热议问题