Magento 1.5.1.0-尝试更新产品的库存数量时,getStockData返回NULL
我在Magento中加载了产品,我正在尝试批量更新其库存数量。我使用Mage_Catalog_Model_Product创建了所有产品,并使用setStockData设置了它们的数量,如:Magento 1.5.1.0-尝试更新产品的库存数量时,getStockData返回NULL,magento,magento-1.5,Magento,Magento 1.5,我在Magento中加载了产品,我正在尝试批量更新其库存数量。我使用Mage_Catalog_Model_Product创建了所有产品,并使用setStockData设置了它们的数量,如: $product = new Mage_Catalog_Model_Product(); $product->setTypeId('simple'); $product->setStatus(1); $product->setSku($sku); $product->setStock
$product = new Mage_Catalog_Model_Product();
$product->setTypeId('simple');
$product->setStatus(1);
$product->setSku($sku);
$product->setStockData(array(
'is_in_stock' => 1,
'qty' => $record['stockstatus'],
'manage_stock' => 0,
));
...
所以我看到setStockData工作了。。。13000多次
现在,正如我所说,我正在尝试更新我创建的产品的库存,使用我创建产品时所做的更改。。。我在网上看到的一种变化,与其他地方几乎相同
我的问题是,我可以在上面的链接中使用代码的变体来获取有效的product对象,但是当我调用对象上的getStockData时,它返回NULL:
$product = Mage::getModel('catalog/product')
->loadByAttribute('product_code', '678910');
var_dump($product->getName()); // returns 'Hello My Name is Product'
var_dump($product->getProductCode()); // returns '678910'
var_dump($product->getSku()); // returns 'SKU1234'
var_dump($product->getStockData()); // returns NULL (and there is a qty of 52 set)
(我还尝试在上面的链接中获得代码没有变化的产品,结果与我预期的相同。)
因此,如果无法使用getStockData获取股票数据,则无法将股票数据设置为:
$product = Mage::getModel('catalog/product')
->loadByAttribute('product_code', $record['productcode']);
$stockData = $product->getStockData();
$stockData['qty'] = $record['stockstatus'];
$stockData['is_in_stock'] = ($record['stockstatus'] > 0) ? 1 : 0;
$product->setStockData($stockData);
$product->save();
有什么我遗漏的吗?我不明白为什么getStockData返回NULL。有人能帮我理解我可能做错了什么吗?是的没有为什么getStockData()返回null。。但我可以通过以下方式获得库存数量:
$qtyStock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getId())->getQty();
使用getStockItem()而不是getStockData()
对数组使用getData,对对象使用getItem。更改数量后,应该对库存项目而不是产品调用save()。以下代码适用于我:
$product = Mage::getModel('catalog/product')
->loadByAttribute('product_code', '678910');
$stock_obj = Mage::getModel('cataloginventory/stock_item')
->loadByProduct($product->getId());
$stockData = $stock_obj->getData();
$stockData['qty'] = $record['stockstatus'];
$stock_obj->setData($stockData);
$stock_obj->save();
是的,我还使用它在产品详细信息页面上获取产品的数量。不幸的是,这不是我在这里要做的。我需要获取stockData数组,以便修改它并将其保存回更新后的产品。那么,为什么不使用上面的代码而不使用
getQty()
<代码>Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getId())这应该可以做到!
$stockData = $product->getStockItem();
$stockData->setData('qty',555);
$stockData->setData('is_in_stock',1);
$stockData->setData('manage_stock',1);
$stockData->setData('use_config_manage_stock',1);
$stockData->save(); // This enough to save stock data.
$product = Mage::getModel('catalog/product')
->loadByAttribute('product_code', '678910');
$stock_obj = Mage::getModel('cataloginventory/stock_item')
->loadByProduct($product->getId());
$stockData = $stock_obj->getData();
$stockData['qty'] = $record['stockstatus'];
$stock_obj->setData($stockData);
$stock_obj->save();