私はpostUpdateリスナーを持っていますが、更新前の値と更新後のDBエントリの値を知りたいと思います。 Symfony 2.1でこれを行う方法はありますか?私はgetUnitOfWork()に格納されているものを見てきましたが、更新が既に行われているので空です。symfony 2.1のpostUpdateリスナーを介して何が変更されたか調べる
6
A
答えて
7
解決策を見つけたhere。私が必要としたのは、実際にはpreUpdate()の一部でした。 LifecycleEventArgsでgetEntityChangeSet()を呼び出す必要がありました。
マイコード:
public function preUpdate(Event\LifecycleEventArgs $eventArgs)
{
$changeArray = $eventArgs->getEntityChangeSet();
//do stuff with the change array
}
-1
あなたは教義のマニュアルにexampleを見つけることができます。
class NeverAliceOnlyBobListener
{
public function preUpdate(PreUpdateEventArgs $eventArgs)
{
if ($eventArgs->getEntity() instanceof User) {
if ($eventArgs->hasChangedField('name') && $eventArgs->getNewValue('name') == 'Alice') {
$eventArgs->setNewValue('name', 'Bob');
}
}
}
}
+0
OPには、「値は更新前であり、DBエントリの値は更新後でした」という特別な質問があります。レスポンスには、ハードコーディングする必要のある各列のメソッド呼び出しが必要です。 – ahonnecke
0
あなたEntitiy:
/**
* Order
*
* @ORM\Table(name="order")
* @ORM\Entity()
* @ORM\EntityListeners(
* {"\EventListeners\OrderListener"}
*)
*/
class Order
{
...
あなたのリスナー:
class OrderListener
{
protected $needsFlush = false;
protected $fields = false;
public function preUpdate($entity, LifecycleEventArgs $eventArgs)
{
if (!$this->isCorrectObject($entity)) {
return null;
}
return $this->setFields($entity, $eventArgs);
}
public function postUpdate($entity, LifecycleEventArgs $eventArgs)
{
if (!$this->isCorrectObject($entity)) {
return null;
}
foreach ($this->fields as $field => $detail) {
echo $field. ' was ' . $detail[0]
. ' and is now ' . $detail[1];
//this is where you would save something
}
$eventArgs->getEntityManager()->flush();
return true;
}
public function setFields($entity, LifecycleEventArgs $eventArgs)
{
$this->fields = array_diff_key(
$eventArgs->getEntityChangeSet(),
[ 'modified'=>0 ]
);
return true;
}
public function isCorrectObject($entity)
{
return $entity instanceof Order;
}
}
関連する問題
- 1. 変更されたデータベースエントリを調べる
- 2. モデルが変更されたかどうか調べるには
- 3. モデルが変更されているかどうかを調べるASP.NET MVC
- 4. 変更されたリスナーのレルムリスト
- 5. ウェブページがいつ最後に変更されたかを調べるには?
- 6. JCheckbox変更リスナーがマウスオーバーイベントを通知されました
- 7. ドックフィルターと変更されたリスナー
- 8. スイフト3:日付が変更されているかどうか調べます。
- 9. Java - インターフェイスにキャストし、キャストされたタイプが何であるかを調べる
- 10. javaがPythonを介してシステムにインストールされているかどうかを調べる方法は?
- 11. 注釈にDroneDeployApiリスナーが変更されていますか?
- 12. jQueryはブラウザウィンドウのサイズが変更されても要素幅を調べる
- 13. ファイルに数字が何回表示されているのかを調べる
- 14. UITableViewCellが2.1から3.0に変更されました - 重複セル
- 15. 変更された質問/回答について、どのパターンを調べるべきですか?
- 16. Symfony 2.1を搭載した弾性ロードバランサ
- 17. Reactでブラウザが経路を変更したかどうかを調べる
- 18. std :: sort(begin、end)が範囲を変更したかどうかを調べる
- 19. svchostが何をしているかを調べるには
- 20. プロセスが何をしているかを調べる方法は?
- 21. inotify - どのユーザーがファイルを変更したかを調べるには?
- 22. Groovyでファイルが変更されたかどうかを調べるための高速処理
- 23. 2つの変更リスナーが両方とも変更されるのを待つ
- 24. django - クエリセット内の何かが返されるかどうかを調べる
- 25. 特定のリビジョンでどのファイルが変更されたかを調べるための配管コマンド
- 26. クラス変数が何とか変更されました
- 27. SQLトレースを介してストアドプロシージャ内のトランザクションレベルを調べる
- 28. 構成されたポップアップでデータの変更を調べる方法
- 29. Enterprise Architectのすべてのダイアグラムフォントが変更されました
- 30. GWT 2.1プレイス/アクティビティテクニックグリッチ:ナビゲーションが確認される前にURLが変更される
あなたが ''更新前(イベントを\ PreUpdateEventArgs $ EventArgs)を意味しましたか?メソッド 'getEntityChangeSet()'が 'LifecycleEventArgs'に存在しません – Lughino
リンクが壊れているので、可能であれば更新してください。 – mboullouz
linkパーミッションが拒否されました –