2013-06-05 144 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與舊用戶組和$用戶與新組?事件是preUpdate,因此在更新對象應該不同之前。

+0

你能再次寫下你的問題的最後一部分嗎?或者,更好地解釋它?我無法理解這裏提出的問題。 – DonCallisto

回答

1

看一看學說的文件,看看有什麼可以在preUpdate生命週期回調獲得:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#preupdate

你有原始的和改變的值直接訪問,因此您不必查詢數據庫。

爲了回答你的問題,爲什麼這兩個值是相同的:我不是100%肯定的,但最有可能的是EntityManager實際上理解你想檢索相同的對象,所以它返回它不查詢數據庫。要再次實際查詢數據庫,您必須以某種方式刷新EM中的對象(這可能最終會丟失您的更改)。