Magento 1.5.1.0 - 尝试更新产品的库存数量时,getStockData返回NULL

dem*_*rts 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->setStockData(array(
    'is_in_stock' => 1,
    'qty' => $record['stockstatus'],
    'manage_stock' => 0,
));
...
Run Code Online (Sandbox Code Playgroud)

所以我看到setStockData工作...... 13,000次以上.

现在,正如我所说,我正在尝试更新我创建的产品的库存,使用我创建产品所做的变化...我在这里看到的变化,几乎与网络上的其他地方相同.

我的问题是我可以在上面的链接中使用代码的变体并获得有效的产品对象,但是当我在对象上调用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)
Run Code Online (Sandbox Code Playgroud)

(我也试过在上面的链接中获得没有变化代码的产品,并且得到了与我预期相同的结果.)

$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)
Run Code Online (Sandbox Code Playgroud)

所以,如果我不能用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();
Run Code Online (Sandbox Code Playgroud)

有什么我想念的吗?我不明白为什么getStockData返回NULL.有人能帮助我理解我可能做错了吗?

小智 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.
Run Code Online (Sandbox Code Playgroud)

对数组使用getData,对对象使用getItem.


小智 1

是的,不为什么 getStockData() 返回 null ..但我能够使用以下方法获取库存数量:

    $qtyStock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getId())->getQty();
Run Code Online (Sandbox Code Playgroud)