Magento 1.5.1.0 - при попытке обновить количество товара на складе getStockData возвращает значение NULL - PullRequest
5 голосов
/ 16 июля 2011

У меня есть продукты, загруженные в 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.Может ли кто-нибудь помочь мне понять, что я могу делать неправильно?

Ответы [ 3 ]

8 голосов
/ 28 декабря 2011

Используйте 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 голос
/ 17 августа 2012

Вы должны вызывать save () для stock_item, а не product после изменения количества.Следующий код работал для меня:

$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();
1 голос
/ 27 июля 2011

да нет, почему getStockData () возвращает ноль .. Но мне удалось получить количество запаса, используя следующее:

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