无法更改库存数量

时间:2014-12-03 09:22:18

标签: php magento

我试图用Mage调整产品库存。但由于某些原因,我的所有更改都被忽略了,我根本没有得到错误消息。

我已经在google上进行了大量研究,如果在此处找到此代码(Cannot update Stock Item Quantity for a Product in Magento 1.6.2),则结束此代码。

$product = Mage::getModel('catalog/product')->loadByAttribute('sku', "test_7");



               $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')
               );

但由于某种原因,答案仍然是:

  

股票:qty = 0,instock =,man_stock =,use_cfg_man_stock =新股票:   qty = 0,instock = 1,man_stock = 0,use_cfg_man_stock = 0

有没有人知道可能出现什么问题?

2 个答案:

答案 0 :(得分:1)

就个人而言,我在CLI脚本中使用了以下内容。请确保在应用以下代码后重新索引:

$product = Mage::getModel('catalog/product')->loadByAttribute('sku', "test_7");

if($product) {
    $stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getId());
    if(!$stockItem->getId()) {
        $stockItem->setData('product_id', $product->getId());
        $stockItem->setData('stock_id', 1);
    }

    $stockItem->setData('qty', 1);
    $stockItem->setData('min_qty', 1);
    $stockItem->setData('use_config_min_qty', 0);
    $stockItem->setData('is_qty_decimal', 0);
    /** Add other stockinformation from list below **/

    $stockItem->save();
} else {
    // product not found
}

确保在保存后$stockItem$product被包围的循环中使用此代码。

在我提及其他stockinformation字段的代码中,使用以下内容:

  • 数量
  • min_qty
  • use_config_min_qty
  • is_qty_decimal
  • 缺货
  • use_config_backorders
  • min_sale_qty
  • use_config_min_sale_qty
  • max_sale_qty
  • use_config_max_sale_qty
  • is_in_stock
  • use_config_notify_stock_qty
  • manage_stock
  • use_config_manage_stock
  • stock_status_changed_automatically
  • TYPE_ID

额外奖金;以编程方式重新编制索引:

$process = Mage::getModel('index/indexer')->getProcessByCode('cataloginventory_stock');
$process->reindexAll();

重新索引所有指数甚至可能更好:

$indexCollection = Mage::getModel('index/process')->getCollection();
foreach ($indexCollection as $index) {
    $index->reindexAll();
}

答案 1 :(得分:1)

将此代码设置为设置库存值;

$stockItem = Mage::getModel('cataloginventory/stock_item');
$stockItem->assignProduct($product);
$stockItem->setData('is_in_stock', 1);
$stockItem->setData('qty', $stockQty);
$product->setStockItem($stockItem);