我试图用Mage调整产品库存。但由于某些原因,我的所有更改都被忽略了,我根本没有得到错误消息。
我已经在google上进行了大量研究,如果在此处找到此代码(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')
);
但由于某种原因,答案仍然是:
股票:qty = 0,instock =,man_stock =,use_cfg_man_stock =新股票: qty = 0,instock = 1,man_stock = 0,use_cfg_man_stock = 0
有没有人知道可能出现什么问题?
答案 0 :(得分: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
被包围的循环中使用此代码。
在我提及其他stockinformation字段的代码中,使用以下内容:
额外奖金;以编程方式重新编制索引:
$process = Mage::getModel('index/indexer')->getProcessByCode('cataloginventory_stock');
$process->reindexAll();
重新索引所有指数甚至可能更好:
$indexCollection = Mage::getModel('index/process')->getCollection();
foreach ($indexCollection as $index) {
$index->reindexAll();
}
答案 1 :(得分:1)
将此代码设置为设置库存值;
$stockItem = Mage::getModel('cataloginventory/stock_item');
$stockItem->assignProduct($product);
$stockItem->setData('is_in_stock', 1);
$stockItem->setData('qty', $stockQty);
$product->setStockItem($stockItem);