2011-07-16 42 views
5

我有装入Magento的产品,我试图批量更新库存量。我创建的所有使用Mage_Catalog_Model_Product的产品和使用setStockData像设置数量上他们:Magento 1.5.1.0 - 在尝试更新产品的库存数量时,getStockData返回NULL

$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次。

现在,正如我所说的,我试图更新我创建的产品上的库存,使用我创建产品时所做的一个变体......一个变体,我看到here和几乎相同的网络上其他地方。

我的问题是,我可以在上面的链接使用代码的变化,并得到有效的产品对象,但是当我打电话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) 

(I”以前也尝试过让对代码没有变化的产品在上面的链接和我的预期有同样的效果。)

$product_id = Mage::getModel('catalog/product')->getIdBySku('SKU1234'); 
$product = Mage::getModel('catalog/product'); 
$product->load($product_id); 
$stockData = $product->getStockData(); 

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。有人能帮助我理解我可能做错了什么吗?

回答

1

耶没有为什么getStockData()返回null。但我可以用下面来获得股票数量:

$qtyStock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getId())->getQty(); 
+0

是的,我也用它来获取产品详细信息页上的产品数量。不幸的是,这不是我在这里想要做的。我需要获得stockData数组,以便我可以修改它并将其保存回更新的产品。 – demarts

+0

那么为什么不使用上面的代码没有'getQty()'? '法师:: getModel('cataloginventory/stock_item') - > loadByProduct($ product-> getId())'应该做的伎俩! –

8

使用getStockItem()而不是getStockData()

$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. 

为数组使用getData,为对象使用getItem。

1

更改qty后,您应该在stock_item上调用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();