0

こんにちは、ユーザーグループが変更されたかどうかを確認するために Doctrine 2 リスナーを使用しています。だから私は - {name: doctrine.event_listener, event: preUpdate }service.yml のメソッドが実行され、私はそのようなことをしています

$user = $args->getEntity();
$em   = $args->getEntityManager();

if($user instanceof \iTracker\UserBundle\Entity\User) {

    $u = $em->getRepository('UserBundle:User')->find($user->getId());
    var_dump($u->getUserGroup());
    var_dump($user->getUserGroup());
}

そして、両方のオブジェクトはこれと同じです。古いユーザーグループに反対$uし、新しいグループに $user すべきですか?? イベントは preUpdate であるため、更新前のオブジェクトは異なる必要があります。

4

1 に答える 1

1

Doctrine のドキュメントを見て、preUpdateライフサイクル コールバックで何が得られるかを確認してください: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#preupdate

元の値と変更された値に直接アクセスできるため、データベースにクエリを実行する必要はありません。

そして、あなたの質問に答えるために、なぜ2つの値が同じなのか:私はそれについて100%確信が持てませんが、おそらく、EntityManagerすでに持っているのと同じオブジェクトを取得したいことを実際に理解しているので、データベースにクエリを実行せずにそれを返します. 実際に DB に再度クエリを実行するには、EM 内のオブジェクトを何らかの方法で更新する必要があります (おそらく変更が失われることになります)。

于 2013-06-05T13:24:31.497 に答える