Php 无法更新Magento 1.6.2中产品的库存项目数量
我正在尝试从脚本中更新Magento中产品的库存量 我加载产品、设置库存数量并保存,但数量保持不变Php 无法更新Magento 1.6.2中产品的库存项目数量,php,magento,magento-1.6,Php,Magento,Magento 1.6,我正在尝试从脚本中更新Magento中产品的库存量 我加载产品、设置库存数量并保存,但数量保持不变 // get stock data $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-&g
// get stock data
$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
$product->stockItem->setData('qty', $stockQty);
$product->stockItem->setData('is_in_stock', $stockQty>0 ? 1 : 0);
$product->stockItem->setData('manage_stock', 1);
$product->stockItem->setData('use_config_manage_stock', 0);
$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')
);
// prints out qty=0, instock=, man_stock=, use_cfg_man_stock=
我哪里出错了?我自己解决了:
// get stock data
$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')
);
// prints out qty=1, instock=1, man_stock=0, use_cfg_man_stock=0
通过创建一个新的库存项目,并将其分配给产品。希望这对其他人有所帮助。您所缺少的只是保存
$stockItem
。您不需要创建新的库存项目
,也不需要保存产品
if (!($stockItem = $product->getStockItem())) {
$stockItem = Mage::getModel('cataloginventory/stock_item');
$stockItem->assignProduct($product)
->setData('stock_id', 1)
->setData('store_id', 1);
}
$stockItem->setData('qty', $stockQty)
->setData('is_in_stock', $stockQty > 0 ? 1 : 0)
->setData('manage_stock', 1)
->setData('use_config_manage_stock', 0)
->save();
显示产品的库存数量-
<?php echo $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product); ?>
如果要显示单个数据,请使用此-
<?php echo $stock->getQty(); ?> // Will display stock quantity
<?php echo $stock->getMinQty(); ?> // Will display minimum quantity
<?php echo $stock->getMinSaleQty(); ?> //will display minimum salable quantity
//将显示库存数量
//将显示最小数量
//将显示最小可销售数量
在我的例子中,我遇到了与以编程方式导入的产品相同的问题。
我刚刚意识到我忘了在数组中添加库存数据
'name' => $productName,
'stock_data' => array(
'use_config_manage_stock' => 0,
'manage_stock' => 0,
'qty' => 0,
'stock_id' => 1,
'min_qty' => 0,
)
如果没有库存数据信息,则在将产品添加到购物车时,Magento会生成一个异常(位于\Mage\u CatalogInventory\u Model\u stock\u Item)
使用此节点,它可以正常工作。=) 您需要
setData('stock_id',1)
两次吗?第二次setData()
是在模块设置脚本中的CE 1.7.0.2上,在Magento 1.9中的store_id工作正常。在找到正确的(你的)答案之前,我已经浪费了几个小时!漂亮的代码片段Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product)
我以前使用$prodotto->getStockItem()
但是当$prodotto
通过loadByAttribute()
加载时,它是一个Varien\u对象
而不是Mage\u CatalogInventory\u Model\u Stock\u Item
我在试图保存库存项目或产品时,实际上遇到了一个完整性约束冲突
,但是@nachito solution为我解决了这个问题。