原则2可在INSERT上进行版本控制


Doctrine 2 Versionable on INSERT

我已经使用以下示例成功地为我的实体实现了审计跟踪:http://www.doctrine-project.org/blog/doctrine2-versionable.

一切都很好,即使是人际关系。

问题:

如果数据库中不存在记录,则原则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);
        }
    }
}

您发布的文章很旧。onFlush不是适合侦听的事件。

您要收听postPersist、postUpdate、postRemove。每个实体都会调用每个,所以你不需要做任何工作单元的事情。

这里有更好的例子:

http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/events.html