您好我使用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所以在更新对象应该不同之前。
答案 0 :(得分:1)
查看Doctrine文档,了解preUpdate
生命周期回调中可以获得的内容:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#preupdate
您可以直接访问原始值和更改的值,因此您无需查询数据库。
为了回答你的问题,为什么这两个值是相同的:我不是100%肯定,但很可能EntityManager
实际上理解你想要检索你已经拥有的同一个对象,所以它返回它而不查询数据库。要再次实际查询数据库,您必须以某种方式刷新EM中的对象(这可能最终会丢失您的更改)。