gpt4 book ai didi

php - $产品->保存();导致错误 - 更改产品数量时

转载 作者:可可西里 更新时间:2023-11-01 13:43:19 25 4
gpt4 key购买 nike

我正在创建一个自定义模块。

我正在测试更新产品数量的能力。

我已经创建了一个基本的 magento 模块并开始使用 indexController.php 中的代码进行测试,这是我的代码:

public function indexAction() {

//Just grabbing sku# 62701 for testing...
$tempProduct = Mage::getModel('catalog/product')->loadByAttribute('sku', 62701 );

$stockData['qty'] = 300;
$tempProduct->setStockData($stockData);

$tempProduct->save();

}

最后一行出现错误。

来自错误日志:

a:5:{i:0;s:46:"无效方法 Varien_Object::save(Array()

接着是堆栈跟踪...

感谢任何帮助,谢谢。

最佳答案

我不得不调查这个问题并找到了问题所在。整个库存数据/项目界面有点棘手。

问题

Mage_Catalog_Model_Abstract->loadByAttribute 在集合 catalog/product_collection 上使用集合加载,限制为 1。

该集合中产品的库存项目通过事件观察器 Mage_CatalogInventory_Model_Observer->addStockStatusToCollection 加载,它监听事件 catalog_product_collection_load_afteraddStockStatusToCollection 仅当标记 require_stock_items 设置为 true 时才加载产品的库存项目。

Mage_Catalog_Model_Abstract->loadByAttribute 的情况下,此标志未设置,因此我们最终得到 $product->_data['stock_item'] 类型 Varien_Object(参见 Mage_CatalogInventory_Model_Stock_Status 第 488-491 行)。

这会导致错误

Invalid method Varien_Object::save...

$product->保存

如果您仍然保存产品并希望在同一交易中进行库存更新,我推荐解决方案 1。解决方案 2 仅设置库存数据,因此避免调用昂贵的 $product->save

方案一

对产品使用额外的加载:这会正确加载 $product->_data['stock_item']

Mage::getModel('catalog/product')->loadByAttribute('sku', 62701 );
$tempProduct->load($tempProduct->getId());

这是数据库上的额外读取事务,会减慢速度。

解决方案2

在其他答案中建议直接使用类 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();

关于php - $产品->保存();导致错误 - 更改产品数量时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12572496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com