【发布时间】:2011-10-25 10:07:41
【问题描述】:
我正在努力解决以下问题,在一个实体类中,我有一个 preUpdate lifeCycleCallback,它必须在刷新 auditTrail 的更改之前保留一个新实体。
在 preRemove 和 prePersist 中,这可以完美运行,但在 preUpdate 中什么也没发生。如果我自己调用flush,它会进入一个递归循环。
根据教义用户的 Google 组将其放入 onFlush 应该是一个选项,但在这种情况下,我无法访问实体的旧值以将这些旧值保存在新的其他实体中以进行审计。
我要归档的一些小例子:
<?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 :-(
}
}
?>
这不是真正的代码,只是为了说明我想要的东西。我也尝试过这样的事情:
$em->getUnitOfWork()->computeChangeSet($em->getClassMetaData(get_class($entity)), $entity);
应该根据这个主题工作:http://groups.google.com/group/doctrine-user/browse_thread/thread/bd9195f04857dcd4
如果我再次调用刷新,但这会导致 Apache 由于一些无限循环而崩溃。
有谁对我有想法吗?谢谢!
【问题讨论】:
标签: orm doctrine-orm