2013-06-05 5 views
0

Привет, я использую прослушиватель Doctrine 2, чтобы проверить, изменилась ли группа пользователей. Так что я - {name: doctrine.event_listener, event: preUpdate } я мой service.yml Метод выполняется и Im делает такую ​​вещьDoctrine 2 прослушиватель

$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, поэтому перед тем, как объект обновления должен быть другим.

+0

Не могли бы вы еще раз написать последнюю часть своего вопроса или, наоборот, объяснить ее лучше? Я не могу понять, что здесь задают. – DonCallisto

ответ

1

Посмотрите документацию доктрины, чтобы увидеть, что вы можете получить в preUpdate жизненного цикла обратного вызова: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#preupdate

У вас есть прямой доступ к исходным и измененным значениям, так что вы не должен обращаться к базе данных.

И чтобы ответить на ваш вопрос, почему два значения одинаковы: я не уверен на этом, но, скорее всего, EntityManager действительно понимает, что вы хотите получить тот же объект, что и у вас, поэтому он возвращает он не запрашивает базу данных. Чтобы на самом деле запросить БД, вам нужно как-то обновить объект в EM (что, вероятно, закончится тем, что вы потеряете свои изменения).