【发布时间】: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