学说2版本协会

时间:2012-10-30 14:26:24

标签: doctrine-orm associations versioning

我需要为某些实体实现版本控制。

我有一个实体“地图”,它与OneToMany有“Spot”实体的关联。 “Map”和“Spot”应该是可版本化的。

应该可以显示旧版本的“地图”,其中包含所有相关的“斑点”。

因此,在旧版本中,“地图”本身可能会有另一个背景图像,但相关“斑点”的位置或数量也可能不同。

我喜欢AuditLog的这种方法(在页面末尾): http://www.doctrine-project.org/blog/doctrine2-versionable.html

[php]
class AuditListener implements EventSubscriber
{
    public function getSubscribedEvents()
    {
        return array(Events::onFlush);
    }

    public function onFlush(OnFlushEventArgs $args)
    {
        $em = $args->getEntityManager();
        $uow = $em->getUnitOfWork();

        $changeDate = new DateTime("now");
        $class = $em->getClassMetadata('DoctrineExtensions\Auditable\AuditEntry');

        foreach ($uow->getScheduledEntityUpdates() AS $entity) {
            if ($entity instanceof Auditable) {
                $changeSet = $uow->getEntityChangeSet($entity);

                foreach ($changeSet AS $field => $vals) {
                    list($oldValue, $newValue) = $vals;
                    $audit = new AuditEntry(
                        $entity->getResourceName(),
                        $entity->getId(),
                        $oldValue,
                        $newValue,
                        $changeDate
                    );

                    $em->persist($audit);
                    $em->getUnitOfWork()
                       ->computeChangeSet($class, $audit);
                }
            }
        }
    }
}

我想知道如何处理可版本化实体的关联。

例如:

当“地图”发生变化时,会保存一个新的地图版本,但是与斑点的关联呢? 当“Spot”发生变化时,其父级“Map”会怎样。

在构建新版“地图”时: - 我怎么能弄清楚它有关联? - 我怎么能知道一个Association也是Versionable - 我该如何处理Associatons

即使关联不是可版本化的,如果我更改关联的非版本化实体,我也会更改旧版本的“Map”,因为它们仍然是关联的。

有没有人有经验或想法如何使用doctrine 2.1来管理它?

0 个答案:

没有答案