私はDoctrine 2エンティティを使用しています。データベースに保存するときに関連項目を更新する必要があるエンティティがいくつかあります。たとえば、ユーザーレコードが変更された場合、「無効」フィールドが「偽」に設定された新しいレコードとして保存されます。しかし、そのユーザーの以前のすべてのレコードの '非アクティブ'フィールドを 'true'に設定する必要があります。これは、監査履歴を保持するために行われます。これはレガシーデータベースなので、構造を変更することはオプションではありません。Doctrine 2、コードを実行する必要がありますpre-persist/post-persist
Doctrineは保存メソッド($thisObj->save()
)を持つオブジェクトではなく、persisterオブジェクト(persist :: $ thisObj)にオブジェクトを渡すことでオブジェクトを保存するので、 'save'メソッドを親オブジェクト。私がここに見る唯一のオプションは '永続的な'オブジェクトを拡張しようとすることですが、それは起こるのを待っているガチョウのように聞こえます。
イベントに関する情報はいくつか見つかりましたが、特定のエンティティが永続化されたときにイベントを発生させるためのイベントの追加方法はわかりません。
一部のエンティティに保存前/保存後の機能を追加するにはどうすればよいですか。
OKをイベントは、時々、「単純に発火することを拒否し、」なぜ、考え出しました。 prePersist/posPersistイベントは、新しいレコードを保存するときにのみ発生します。既存のレコードを更新する場合、代わりにpreUPdate/postUpdateが火を放ちます。したがって、既存のオブジェクトを保存する場合は、persistメソッドを呼び出しても、preUpdate/postUpdateライフサイクルイベントが適用されます。 –
私を正しい方向に導いてくれてありがとう。 1つのフォローアップ:基本クラスからすべてのエンティティを継承して、いくつかの一般的な機能を提供します。私はすべてのエンティティにイベントを配置する必要はありません。なぜなら、私の場合、私は実際にpostLoadを使用してコンストラクタを起動しています。これを基本クラスに移動するには、余分なコピー&ペーストをentitiyする必要はありませんか? – redreinard
2番目のポイントは私にとって非常に便利でした!どうもありがとうございました! –