Magento产品保存错误事务尚未提交

时间:2013-12-03 15:38:44

标签: php mysql magento magento-1.7

当我尝试使用脚本在客户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();

    }

1 个答案:

答案 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个参数。

  • 要更新的产品ID数组
  • 包含要更新的属性的数组
  • 商店ID。 0表示默认值。
相关问题