【问题标题】:Product won't save. Processing forever产品不会保存。永远处理
【发布时间】:2012-11-30 11:05:43
【问题描述】:

我正在为 Magento 做一个模块,我的模块具有与 Magento 的 Crosssell 本机功能相同的功能。 我有这个产品网格,用户选择一些复选框来将此产品与主要产品相关联。 没事。

但是,我创建了一个自定义属性来保存此产品的 ID,并为“catalog_product_save_after”事件创建了一个观察者:

  <events>
        <catalog_product_save_after>
            <observers>
                <brindeproduto_save_product_data>
                    <type>singleton</type>
                    <class>brindeproduto/observer</class>
                    <method>saveProductTabData</method>
                </brindeproduto_save_product_data>
            </observers>
        </catalog_product_save_after>
    </events>

在我的 saveProductTabData 上,我按请求的 ID 加载主要产品,并将所选产品的 IDS 放在我的自定义属性上,例如“1,2,3,4,5,6”。

好的,但是当我执行 $product->save();我的浏览器负载无限,没有任何错误或异常。 观察者的代码很简单。

$product = Mage::getModel('catalog/product')->load($product_id);
//some logical Specific information that is not in question now.
$product->save();

仅此而已。

我已经尝试调试保存功能并得到一些有趣的结果。 在 Mage_Core_Model_Abstract 函数 save() 上,我在部分代码上放了一些骰子,然后得到所有这些。这段代码是 Magento 1.5 社区第 330 行函数保存的一部分。

    if ($dataCommited) {
        $this->_afterSaveCommit();
    }
    return $this;

这是函数的最后一行。我先死再回来。

    if ($dataCommited) {
        $this->_afterSaveCommit();
    }
    die('test');
    return $this;

我有骰子。但在返回之前仅此而已。有些人知道发生了什么?就这样耽误了5个小时。 任何帮助将不胜感激。

【问题讨论】:

  • 我已将代码更改为观察者,只需调用模型来执行保存操作,现在我得到 SQLSTATE[23000]:完整性约束违规:1048 列“值”不能为空
  • 你能添加你的观察者代码吗?你不应该在你的观察者中做任何保存,否则你会进入一个永无止境的循环
  • 大声笑,你说得有道理。 @R.S,我什至考虑过。如果我在保存后保存观察者,他会一次又一次地调用同一个观察者。大声笑也许这个完整性约束违规是由这个问题引起的,因为尝试多次保存产品可能会破坏数据库,我现在正在恢复数据库。
  • @R.S 将您的答案放在 Answers 上以标记为正确。

标签: php magento magento-1.5


【解决方案1】:

您不应该在观察者中进行任何保存 (*_save_after)。

这将导致一个永无止境的循环

【讨论】:

  • 有时候我们对明显的问题视而不见,需要外面的人才能看到。泰人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-14
  • 1970-01-01
  • 1970-01-01
  • 2018-04-29
  • 1970-01-01
相关资源
最近更新 更多