2

一部のエンティティのバージョン管理を実装する必要があります。

「スポット」エンティティとの OneToMany 関連付けを持つエンティティ「マップ」があります。「マップ」と「スポット」はバージョン管理可能である必要があります。

関連するすべての「スポット」を含む「マップ」の古いバージョンを表示することが可能になるはずです。

したがって、古いバージョンでは、「マップ」自体が別の背景画像を持つ可能性がありますが、関連する「スポット」の位置または数も異なる場合があります。

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);
                }
            }
        }
    }
}

バージョン管理可能なエンティティの関連付けをどのように処理するのだろうか。

例えば:

「マップ」が変更されると、新しいマップ バージョンが保存されますが、スポットへの関連付けはどうでしょうか。「スポット」が変化すると、その親の「マップ」はどうなりますか。

「マップ」の新しいバージョンを構築する場合: - 関連があることをどのように把握できますか? - アソシエーションもバージョン管理可能であることを確認するにはどうすればよいですか - アソシエーションを処理するにはどうすればよいですか

関連付けがバージョン管理できない場合でも、関連付けられているバージョン管理できないエンティティを変更すると、「マップ」の古いバージョンも変更されます。それらはまだ関連付けられているためです。

ドクトリン2.1でそれを管理する方法を経験したり、アイデアを持っている人はいますか?

4

0 に答える 0