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

您可以直接访问原始值和更改值,因此您不必查询数据库。

并回答你的问题,为什么这两个值是相同的:我不是 100% 确定这一点,但很可能EntityManager实际上理解你想要检索与你已经拥有的相同的对象,所以它在不查询数据库的情况下返回它. 要真正再次查询数据库,您必须以某种方式刷新 EM 中的对象(这可能最终会丢失您的更改)。

于 2013-06-05T13:24:31.497 回答