2012-02-29 7 views
0

この例を使用して、エンティティの監査証跡を正常に実装しました:http://www.doctrine-project.org/blog/doctrine2-versionableDoctrine 2 Versionable on INSERT

すべてがうまく動作します。

問題:

レコードがデータベースに存在しない場合には、教義2が(予想通り)INSERTを行っている、それはまた、監査証跡を書き込むんがRESOURCEID = 0でそれはdoesnのためそれがフラッシュされる前に(新しい)エンティティの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); 
     } 
    } 
} 

答えて

2

あなたはに投稿された記事はかなり古いです。 onFlushは聞き取る適切なイベントではありません。

あなたは、postPersist、postUpdate、postRemoveを聞きたいです。それぞれはエンティティごとに呼び出されるため、作業単位の作業を行う必要はありません。ここ

良い例:

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

+0

感謝。それは正しい方向に私を指摘した。 –

関連する問題