Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Magento 1.5.1.0-尝试更新产品的库存数量时,getStockData返回NULL_Magento_Magento 1.5 - Fatal编程技术网

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

Magento 1.5.1.0-尝试更新产品的库存数量时,getStockData返回NULL,magento,magento-1.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->setStock

我在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工作了。。。13000多次

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

我的问题是,我可以在上面的链接中使用代码的变体来获取有效的product对象,但是当我调用对象上的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)
(我还尝试在上面的链接中获得代码没有变化的产品,结果与我预期的相同。)

因此,如果无法使用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。有人能帮我理解我可能做错了什么吗?

是的没有为什么getStockData()返回null。。但我可以通过以下方式获得库存数量:

    $qtyStock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getId())->getQty();
使用getStockItem()而不是getStockData()

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

更改数量后,应该对库存项目而不是产品调用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();

是的,我还使用它在产品详细信息页面上获取产品的数量。不幸的是,这不是我在这里要做的。我需要获取stockData数组,以便修改它并将其保存回更新后的产品。那么,为什么不使用上面的代码而不使用
getQty()
<代码>Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getId())这应该可以做到!
$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.
$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();