我有一个包含两个生命周期事件方法的事件订户:prePersist和preUpdate。 prePersist之一按预期工作 - 我修改文档,稍后在检索文档时反映这些更改。尽管如此,preUpdate没有按预期工作。这基本上是什么样子:保留对Doctrine的PreUpdate生命周期事件对文档所做的更改
/**
* Also update the foo code when the bar profile is updated.
* @param LifecycleEventArgs $args
*/
public function preUpdate(LifecycleEventArgs $args)
{
$document = $args->getDocument();
if ($document instanceof BarProfile) {
$document->setFooCode('Salamanders');
}
}
如果我创建一个文档,然后在perPersist功能设置其fooCode为“占位符”,然后当我检索文件后,它fooCode是“占位符”。如果我然后更新它,并再次检索它,那么我希望它的fooCode是'Salamanders'。但是,它仍然是'占位符'。我甚至试过把error_log()
的东西放在那里,它会把东西写到日志中,这样我就可以看到这个方法正在执行。
在$document->setFooCode()
之后,我需要做的第二步是让fooCode的新值保持不变?
阅读细则和示例:http://doctrine-orm.readthedocs.org/en/latest/reference/events.html#preupdate。很多人都被这个问题绊倒了。 – Cerad
我确实读过......但我不明白这是什么意思,直到下面的答案解释它。 – beth
我实际上最终在http://doctrine-mongodb-odm.readthedocs.org/en/latest/reference/events.html#preupdate中使用了解决方案,因为我无法识别我正在更改的属性名称在物体上。 – beth