我已使用此示例成功实施了我的实体审计跟踪:http://www.doctrine-project.org/blog/doctrine2-versionable。
即使有人际关系,一切都很好。
问题:
如果数据库中没有记录,doctrine 2正在执行INSERT(如预期的那样),它也会编写审计跟踪,但是资源ID为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);
}
}
}
答案 0 :(得分:2)
您发布的文章已经过时了。 onFlush不适合听。
您想收听postPersist,postUpdate,postRemove。每个实体都会调用每个实体,因此您不需要执行任何工作单元。
这里有更好的例子:
http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/events.html