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

时间:2011-07-16 05:51:47

标签: 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,
));
...

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

现在,正如我所说,我正在尝试使用我创建产品的变体更新我创建的产品的库存......我看到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)

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

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

3 个答案:

答案 0 :(得分: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 :(得分:1)

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

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

答案 2 :(得分:1)

更改数量后,您应该在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();