2014-12-03 71 views
1

我正在嘗試使用Mage調整產品庫存。但由於某些原因,我的所有更改都被忽略,我根本沒有收到錯誤消息。無法更改庫存量

我已經做了很多關於谷歌的研究,並以此代碼截斷,如果在這裏找到(Cannot update Stock Item Quantity for a Product in Magento 1.6.2)。

$product = Mage::getModel('catalog/product')->loadByAttribute('sku', "test_7"); 



       $stockData = $product->getStockItem(); 
       printf(PHP_EOL.'Stock: qty=%d, instock=%s, man_stock=%s, use_cfg_man_stock=%s'.PHP_EOL, 
       $stockData->getData('qty'), 
       $stockData->getData('is_in_stock'), 
       $stockData->getData('manage_stock'), 
       $stockData->getData('use_config_manage_stock') 
       ); 
       // prints out qty=0, instock=, man_stock=, use_cfg_man_stock= 


       // $stockQty = 1 
       $stockItem = Mage::getModel('cataloginventory/stock_item'); 
       $stockItem->assignProduct($product); 
       $stockItem->setData('is_in_stock', 1); 
       $stockItem->setData('stock_id', 1); 
       $stockItem->setData('store_id', 1); 
       $stockItem->setData('manage_stock', 0); 
       $stockItem->setData('use_config_manage_stock', 0); 
       $stockItem->setData('min_sale_qty', 0); 
       $stockItem->setData('use_config_min_sale_qty', 0); 
       $stockItem->setData('max_sale_qty', 1000); 
       $stockItem->setData('use_config_max_sale_qty', 0); 
       $stockItem->setData('qty', $stockQty); 
       $stockItem->save(); 

       $product->save(); 
       $product->load(); 
       $stockData = $product->getStockItem(); 
       printf('New Stock: qty=%d, instock=%s, man_stock=%s, use_cfg_man_stock=%s'.PHP_EOL, 
       $stockData->getData('qty'), 
       $stockData->getData('is_in_stock'), 
       $stockData->getData('manage_stock'), 
       $stockData->getData('use_config_manage_stock') 
       ); 

但由於某些原因,該反應仍然:

庫存:數量= 0,的inStock =,man_stock =,use_cfg_man_stock =新庫存: 數量= 0,的inStock = 1,man_stock = 0,use_cfg_man_stock = 0

有沒有人有一個想法是什麼可能是錯的?

+0

您是否在應用更改後重新編制了庫存狀態指數的索引? – RichardBernards 2014-12-03 09:25:12

+0

不,這是否必要(因爲它在任何教程中都沒有提及)?有沒有辦法做到這一點編程? – Lukas 2014-12-03 09:27:56

+0

是的,它在大多數設置中都是必需的...查看我的代碼的答案來執行此操作... – RichardBernards 2014-12-03 09:39:01

回答

1

就我個人而言,我在CLI腳本中使用了以下內容。請確保將下面的代碼後重新索引:

$product = Mage::getModel('catalog/product')->loadByAttribute('sku', "test_7"); 

if($product) { 
    $stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getId()); 
    if(!$stockItem->getId()) { 
     $stockItem->setData('product_id', $product->getId()); 
     $stockItem->setData('stock_id', 1); 
    } 

    $stockItem->setData('qty', 1); 
    $stockItem->setData('min_qty', 1); 
    $stockItem->setData('use_config_min_qty', 0); 
    $stockItem->setData('is_qty_decimal', 0); 
    /** Add other stockinformation from list below **/ 

    $stockItem->save(); 
} else { 
    // product not found 
} 

在一個循環,$stockItem$product後都保存garbaged使用此代碼時,確保。

在我提到的其他stockinformation領域的代碼,使用以下命令:

  • 數量
  • min_qty
  • use_config_min_qty
  • is_qty_decimal
  • 缺貨
  • use_config_backorders
  • min_sale_qty
  • use_config_min_sale_qty
  • max_sale_qty
  • use_config_max_sale_qty
  • is_in_stock
  • use_config_notify_stock_qty
  • manage_stock
  • use_config_manage_stock
  • stock_status_changed_automatically
  • TYPE_ID

額外獎金;重新索引編程:

$process = Mage::getModel('index/indexer')->getProcessByCode('cataloginventory_stock'); 
$process->reindexAll(); 

它甚至可能會更好,以重新編制所有指數:

$indexCollection = Mage::getModel('index/process')->getCollection(); 
foreach ($indexCollection as $index) { 
    $index->reindexAll(); 
} 
1

給這個代碼設定股票價值一展身手;

$stockItem = Mage::getModel('cataloginventory/stock_item'); 
$stockItem->assignProduct($product); 
$stockItem->setData('is_in_stock', 1); 
$stockItem->setData('qty', $stockQty); 
$product->setStockItem($stockItem);