我正在努力解决以下问题,在实体类中我有一个preUpdate lifeCycleCallback,它必须在刷新auditTrail的更改之前保留一个新实体.
在preRemove和prePersist中,这可以很好地工作,但在preUpdate中没有任何事情发生.如果我自己调用flush,它会进入递归循环.
根据教学用户的谷歌组织将其放入onFlush应该是一个选项,但在那种情况下我无法访问实体的旧值以将此旧值保存在audittrail的新其他实体中.
我想要存档的一些小例子:
<?php
/**
* @Entity
* @HasLifeCycleCallbacks
*/
class someEntity {
... annotations ...
/**
* @PreUpdate
*/
public function addAuditTrail() {
$em = \Zend_Registry::get('doctrine')->getEntityManager();
$entity = new AuditTrail();
$entity->action = 'update';
$entity->someField = $this->someField;
$em->persist($entity); //this just doesn't do anything :-(
}
}
?>
Run Code Online (Sandbox Code Playgroud)
这不是真正的代码,只是为了说明你想要的东西.我也尝试过这样的事情:
$em->getUnitOfWork()->computeChangeSet($em->getClassMetaData(get_class($entity)), $entity);
Run Code Online (Sandbox Code Playgroud)
哪个应该根据此主题工作:http://groups.google.com/group/doctrine-user/browse_thread/thread/bd9195f04857dcd4
如果我再次调用flush,但由于某些无限循环而导致Apache崩溃.
谁有想法给我?谢谢!