INSERT上的Doctrine 2版本

时间:2012-02-29 17:28:03

标签: php zend-framework doctrine-orm

我已使用此示例成功实施了我的实体审计跟踪: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);
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您发布的文章已经过时了。 onFlush不适合听。

您想收听postPersist,postUpdate,postRemove。每个实体都会调用每个实体,因此您不需要执行任何工作单元。

这里有更好的例子:

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