2012-06-21 43 views
5

我正尝试从脚本中更新Magento中产品的库存数量。无法更新Magento 1.6.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 
$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= 

我哪里错了?

+0

尝试保存库存项目或产品时,我实际上收到了“完整性约束违规”,但@nachito解决方案已为我解决。 – Willster

回答

16

你只是想保存$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(); 
+0

在Magento ver。 1.7.0.2 – user457015

+0

你需要'setData('stock_id',1)'两次吗? – PiTheNumber

+0

第二个'setData()'是* store_id * – nachito

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,并且将其赋值给产品。希望这可以帮助别人。

2

为产品显示库存量 -

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

不错的代码片段''mage :: getModel('cataloginventory/stock_item') - > loadByProduct($ _ product);''我曾经使用过'$ prodotto-> getStockItem()'但是当'$ prodotto'被loadByAttribute() '它是'Varien_Object'而不是'Mage_CatalogInventory_Model_Stock_Item' –

0

在我来说,我得到了同样的问题产品我已经以编程方式导入。 我才意识到,我忘了加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)。

使用此节点,它工作。 =)