2011-07-16 56 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();