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

标签 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();

    }

最佳答案

该错误源于以下事实:获取产品集合时,并未加载所有属性。对集合中的产品调用 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 表示默认值。

关于php - Magento 产品保存错误 事务尚未提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20355367/

相关文章:

php - Magento:从一组中获取所有客户

php - 如何解决 MySQL 中的连接数过多错误?

php 编辑/添加新内容使用数据库中的 POST/GET 进行混淆

php - 将最后一次 mysql 查询的信息保存到历史表中

php - 如何获取 mysql 表最后自动生成的字母数字 ID?

magento - 以编程方式创建产品时无法 setPrice、setTaxClassId 和 setWeight

javascript - 动态添加和删除输入

mysql - 如何在mysql中将分钟转换为小时以及24小时格式

MySQL 用户名变量转移到另一个文件

jquery - chrome中的div位置问题