当我尝试使用脚本在客户magento安装上保存产品时,我在调用$ product-> save();
后收到以下错误 PHP Fatal error: Uncaught exception 'Exception' with message 'User Error: Some transactions have not been committed or rolled back
例如......
$_products = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('supplier')->AddAttributeToFilter('supplier', $options[$vendor['old_supplier_name']]);
foreach($_products as $product){
$product->setData('supplier', $options[$vendor['new_supplier_name']]);
$product->save();
}
答案 0 :(得分:2)
错误来自以下事实:获取产品集合时并非所有属性都已加载。从集合中调用产品save
可能会导致严重问题。您需要在保存前致电load
。此外,产品只能从管理商店保存。
Mage::app()->setCurrentStore(Mage::getModel('core/store')->load(Mage_Core_Model_App::ADMIN_STORE_ID)); //set the admin store;
$_products = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('supplier')->AddAttributeToFilter('supplier', $options[$vendor['old_supplier_name']]);
foreach($_products as $product){
$product = Mage::getModel('catalog/product')->load($product->getId());
$product->setData('supplier', $options[$vendor['new_supplier_name']]);
$product->save();
}
但不要使用上面的代码来更新一个字段。它的实际上很慢 请改用:
$_products = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('supplier')->AddAttributeToFilter('supplier', $options[$vendor['old_supplier_name']]);
Mage::getModel('catalog/product_action')->updateAttributes($_products->getAllIds(), array('supplier'=>$options[$vendor['new_supplier_name']]), 0);
现在有一些解释。
updateAttributes
可用于批量更新产品属性。它需要3个参数。