【问题标题】:Cannot update Stock Item Quantity for a Product in Magento 1.6.2无法在 Magento 1.6.2 中更新产品的库存项目数量
【发布时间】:2012-06-23 18:25:39
【问题描述】:

我正在尝试从脚本中更新 Magento 中产品的库存数量。

我加载产品、设置库存数量并保存 - 但数量保持不变。

// 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
$product->stockItem->setData('qty', $stockQty);
$product->stockItem->setData('is_in_stock', $stockQty>0 ? 1 : 0);
$product->stockItem->setData('manage_stock', 1);
$product->stockItem->setData('use_config_manage_stock', 0);

$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=0, instock=, man_stock=, use_cfg_man_stock=

我哪里错了?

【问题讨论】:

  • 我在尝试保存库存商品或产品时实际上得到了Integrity constraint violation,但@nachito 解决方案为我解决了这个问题。

标签: php magento magento-1.6


【解决方案1】:

您所缺少的只是保存$stockItem。您无需创建新的stock_item,也无需保存产品。

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();

【讨论】:

  • 你需要setData('stock_id', 1)两次吗?
  • 第二个setData()store_id
  • 在 Magento 1.9 中正常工作
  • 在模块设置脚本中的 CE 1.7.0.2 上运行良好。在找到正确的(你的)答案之前,我已经浪费了几个小时!
【解决方案2】:

我自己解决了:

// 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

通过创建一个新的 StockItem 并将其分配给产品。希望这对其他人有帮助。

【讨论】:

    【解决方案3】:

    显示产品的库存数量 -

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

    如果您想显示单个数据,请使用此 -

    <?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
    

    【讨论】:

    • nice sn-p Mage::getModel('cataloginventory/stock_item')-&gt;loadByProduct($_product); 我曾经使用过$prodotto-&gt;getStockItem(),但是当$prodottoloadByAttribute() 加载时,它是Varien_Object 而不是Mage_CatalogInventory_Model_Stock_Item
    【解决方案4】:

    就我而言,我以编程方式导入的产品也遇到了同样的问题。 我刚刚意识到我忘记在数组中添加 stock_data...

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

    如果没有库存数据信息,Magento 在将产品添加到购物车时会生成异常(在 \Mage_CatalogInventory_Model_Stock_Item)。

    有了这个节点,它就可以工作了。 =)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      • 2013-09-24
      相关资源
      最近更新 更多