我已经成功地为我的实体实现了一个审计跟踪,使用这个例子:http://www.doctrine-project.org/blog/doctrine2-versionable。
一切都很好,即使是人际关系。
问题:
如果数据库中不存在记录,原则2正在执行插入(如预期的那样),它也会编写审计跟踪,但使用resourceId =0,因为它在刷新(新)实体之前不知道它的ID。
在这种情况下,我总是丢失记录的第一次审计,实际上永远不知道谁/什么时候创建了记录。
我认为问题就在这里:
public function onFlush(OnFlushEventArgs $args)
{
$em = $args->getEntityManager();
$uow = $em->getUnitOfWork();
foreach ($uow->getScheduledEntityInsertions() AS $entity) {
if ($entity instanceof Versionable) {
$this->_makeSnapshot($entity);
}
}
foreach ($uow->getScheduledEntityUpdates() AS $entity) {
if ($entity instanceof Versionable) {
$this->_makeSnapshot($entity);
}
}
}
发布于 2012-02-29 12:49:56
你发到的那篇文章很旧。onFlush不是要侦听的适当事件。
你想听postPersist,postUpdate,postRemove。每个实体都会被调用,这样您就不需要做任何工作单元了。
这里有更好的例子:
http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/events.html
https://stackoverflow.com/questions/9503790
复制相似问题