2016-06-24 1 views
1

symfonyでDoctrine NotifyPropertyChangedを実装する方法を教えてもらえますか? 私は変更について通知するエンティティでこのコードを実装しました。しかし、これらの変更に対してリスナを別のエンティティに追加する方法はありますか?SymfonyでDoctrine NotifyPropertyChangedを実装する方法

私は、この状況を処理したいという意味です。エンティティブックには、作成者に対してoneToManyがあります。 partcular Authorで何かが変更されたとき、私はそれをBook Entityで反応させたいのです。だから、私はNotifyPropertyChangedをAuthorで実装しました。セッターでは、通知を呼び出しますが、このリスナーをBookエンティティに追加する方法はありますか?

答えて

1

あなたのユースケースは少し違っているようです:ǸotifyPropertyChanged`は、あなたのエンティティが変更されたことをDoctrineに伝えるのに便利です。デフォルトでは、Doctrine2はすべてのプロパティに対して反復処理を行い、それを比較します( "自動的に"です)。 IMO、それを落とす。私が今見ているユースケースは、デフォルトポリシーを使用していたいくつかの非常に特殊なケースがあまりにもコストがかかるケースです。

もう1つの方法は、lifecycle eventsを使用することです。 preUpdateまたはpostUpdateから他のエンティティを変更すると、がよく知られています。が難しいです。 Doctrineはすでに「チェンジセット」の計算を開始しました.DBには何を残しておき、別のエンティティを簡単に追加することはできません。

あなたがセッター内のいくつかのコードを書いてOKですので、簡単にパスは次のようなものです:

class Author 
{ 
    public function setName($name) 
    { 
     // ... 

     // for each setter, call onChanged 
     $this->onChange(); 
    } 

    private function onChange() 
    { 
     foreach ($this->books as $book) { 
      // maybe call some method on your books, like onAuthorChanged() ? 
     } 
    } 
} 
+0

ので、シンプルきれい。どうもありがとうございました!!! :)チャームのように働いた! – Tom

関連する問題