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

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

我的问题是我可以使用上面链接中的代码变体并获得有效的产品对象,但是当我在对象上调用 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。有人可以帮助我了解我可能做错了什么吗?

4

3 回答 3

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。

于 2011-12-28T10:13:03.527 回答
1

更改数量后,您应该在 stock_item 而不是 product 上调用 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();
于 2012-08-17T13:26:11.287 回答
1

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

    $qtyStock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getId())->getQty();
于 2011-07-27T13:31:43.840 回答