我正在尝试在自定义模块中以编程方式更新产品的价格。这是我的代码:
Mage::setIsDeveloperMode(true); // for debug only
try
{
$product = Mage::getModel('catalog/product')->load($productId);
$product->setPrice($newPrice);
$product->save();
}
catch (Exception $ex)
{
echo "Error: ". $ex->getMessage();
}
执行此代码时,我收到以下异常:
警告:为 foreach() 提供的参数无效 /home/www-data/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php 在1180行
在system.log
文件中,我看到这些条目的分配:
2016-03-17T18:01:06+00:00 ERR (3):警告:提供的参数无效 对于 foreach() 在 /home/www-data/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php 在第 1180 行 2016-03-17T18:01:06+00:00 ERR (3):可恢复错误: 参数 3 传递给 Mage_Catalog_Model_Resource_Abstract::_canUpdateAttribute() 必须为 给定的数组类型,在 /home/www-data/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php 在第 1225 行上并在 /home/www-data/public_html/app/code/core/Mage/Catalog/Model/Resource/Abstract.php 在线 543 2016-03-17T18:01:06+00:00 ERR (3):可恢复错误: 参数 3 传递给 Mage_Eav_Model_Entity_Abstract::_canUpdateAttribute() 必须属于 数组类型,给定空值,调用 /home/www-data/public_html/app/code/core/Mage/Catalog/Model/Resource/Abstract.php 在第 545 行并在 /home/www-data/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php 在线 1254 2016-03-17T18:01:06+00:00 ERR (3): 警告: array_key_exists() 期望参数 2 是数组,空值在 /home/www-data/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php 在 1256 行
知道是什么原因造成的吗?我的开发 magento 设置上的相同代码有效,但在生产洋红色中,此错误开始出现,所以我有点困惑。
您可以尝试设置存储:
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$storeId='store_id';
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$productIds = array('products_ids');
$products = Mage::getModel('catalog/product')->getCollection();
$products->addStoreFilter();
$products->addAttributeToSelect('*');
$products->addAttributeToFilter('entity_id', array('in' => $productIds));
foreach($products as $product)
{
$price=$product->setPrice('price');
Mage::app()->setCurrentStore($storeId);
$product->save();
}
试试这段代码,它对我有用。
尝试下面的代码。需要传递存储 ID。这似乎是问题所在。
$array_product = array($productId);
Mage::getSingleton('catalog/product_action')->updateAttributes($array_product, array('price' => $newPrice), $storeId);
如果您以编程方式更新产品,请记下,然后尽量避免 magento 保存功能,该功能非常适合单个产品,但是当您使用大量产品时,会使您的网站变慢。请使用我下面的代码,然后通过SSH使用rendex magento。它会为你工作正常。
$write = Mage::getSingleton('core/resource')->getConnection('core_write');
$write->query("
UPDATE catalog_product_entity_decimal val
SET val.value = (".$productPrice['Price'].")
WHERE val.attribute_id = (
SELECT attribute_id FROM eav_attribute eav
WHERE eav.entity_type_id = 4
AND eav.attribute_code = 'price'
)
AND val.entity_id = '".$product->getId()."'
");