如何保留实体的先前版本?

时间:2012-05-16 11:29:20

标签: symfony doctrine-orm

我需要保留名为 Item 的实体的先前版本。当我更新它时,我会创建一个具有相同ID但具有新版本号的新实体。我尝试使用监听器,但这样我就无法在 preUpdate 方法(无限循环)中保留新的项目。

public function preUpdate(LifecycleEventArgs $args)
{
    $em = $args->getEntityManager();
    $entity = $args->getEntity();

    if ($entity instanceof Item) {

        // Create a new version of the current item
        $item = new Item();
        $item->setId(($entity->getId());
        $item->setVersion($entity->getVersion() + 1);
        $item->setSubject($entity->getSubject());
        $item->setDetail($entity->getDetail());
        $item->setPriority($entity->getPriority());
        $item->setStatus($entity->getStatus());
        $item->setPlannedAt($entity->getPlannedAt());
        $item->setDueAt($entity->getDueAt());
        $item->setValidationToken($entity->getValidationToken());
        $item->setType($entity->getType());

        $em->persist($item);
        $em->flush();
    }
}

我想使用一个带有更新方法的项目管理器,但我不知道这是否是最佳方式。

提前致谢。

1 个答案:

答案 0 :(得分:1)

最后,我使用DoctrineExtensions

提供的StofDoctrineExtensionsBundle的可记录扩展名

感谢kubaLee Davis的帮助!