Como em outras respostas sugeridas, pode-se usar a classe Mage_CatalogInventory_Model_Stock_Item
diretamente. Mas é preciso fazer referência ao produto corretamente por meio de uma chamada setProduct
para ter um código de trabalho para itens de estoque novos e existentes.
$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getId());
$stockItem->setProduct($product)
->setData('stock_id', Mage_CatalogInventory_Model_Stock::DEFAULT_STOCK_ID)
->setData('qty', 1)
->setData('is_in_stock', 1)
->setData('manage_stock', 1)
->setData('use_config_manage_stock', 0)
->setData('use_config_backorders', 0)
->setData('backorders', 0)
->setData('use_config_max_sale_qty', 0)
->setData('max_sale_qty', 1)
->save();
Solução alternativa
No entanto, se você ligar de $product->save
qualquer maneira, eu apenas definiria os dados de ações da $product->setStockdata($array)
seguinte maneira. Dessa forma, o Magento cria um item de estoque correto a partir dos dados do estoque. A grande vantagem é que a atualização do item de estoque ocorre na mesma transação que $product->save()
. Isso é importante para a consistência dos dados.
$stockData = array();
$stockData['qty'] = 1;
$stockData['is_in_stock'] = 1;
$stockData['manage_stock'] = 1;
$stockData['use_config_manage_stock'] = 0;
$stockData['use_config_backorders'] = 0;
$stockData['backorders'] = 0;
$stockData['use_config_max_sale_qty'] = 0;
$stockData['max_sale_qty'] = 1;
$product->setStockData($stockData);
//...
$product->save()