他の回答と同様に、クラスをMage_CatalogInventory_Model_Stock_Item
直接使用できます。しかし、を呼び出して製品を正しく参照し、setProduct
新しい在庫アイテムと既存の在庫アイテムの両方の作業コードを用意する必要があります。
$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();
代替ソリューション
ただし、$product->save
とにかく呼び出す場合は$product->setStockdata($array)
、次のようにして在庫データを設定します。このようにして、Magentoは在庫データから正しい在庫アイテムを作成します。大きな利点は、在庫アイテムの更新がと同じトランザクションで発生すること$product->save()
です。これはデータの整合性にとって重要です。
$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()