2012-11-19 64 views
2

我正在使用Doctrine 2在Symfony 2.1.3上構建一個帶有用戶驗證部分的網站。 每個用戶都可以是「用戶組」的成員,並且每個用戶組可以包含許多用戶。爲什麼多對多關係是空的?

所以這是一個多對多的關係。

我遵循安全教程來驗證我的用戶,它完美地工作。 http://symfony.com/doc/current/cookbook/security/entity_provider.html

密碼被編碼;數據庫關係正常工作。

我有一個服務,處理「LoginSuccess」事件,並將用戶添加到會話中。 我認爲它可以正常工作,因爲我在我的父前端控制器中找到了我的用戶屬性。

public function onAuthenticationSuccess(Request $request, TokenInterface $token) 
{ 
    $session = $request->getSession(); 

    $session->set('_user', $token->getUser()); 

    if ($session->has('referer')) { 
     if (($session->get('referer') !== null) && ($session->get('referer') !== '')) { 
      $response = new RedirectResponse($session->get('referer')); 
     } else { 
      $response = new RedirectResponse($request->getBaseUrl() . '/'); 
     } 
    } else { 
     // if no referer then go to homepage 
     $response = new RedirectResponse($request->getBaseUrl() . '/'); 
    } 

    return $response; 
} 

但現在,我想獲得鑑別的當前用戶的羣體,並給我一個空數組...

// Somewhere in a controller action. 
$session = $this->getRequest()->getSession(); 
$current_user = $session->get('_user'); 
echo '<pre>'; 
exit(var_dump($current_user)); 
object(Me\MyProject\CoreBundle\Entity\User)#38 (16) { 
    [...] 
    ["groups":"Me\MyProject\CoreBundle\Entity\User":private] => object(Doctrine\ORM\PersistentCollection)#34 (9) { 
     ["snapshot":"Doctrine\ORM\PersistentCollection":private] => array(0) { 

     } 
     ["owner":"Doctrine\ORM\PersistentCollection":private] => NULL 
     ["association":"Doctrine\ORM\PersistentCollection":private] => NULL 
     ["em":"Doctrine\ORM\PersistentCollection":private] => NULL 
     ["backRefFieldName":"Doctrine\ORM\PersistentCollection":private] => NULL 
     ["typeClass":"Doctrine\ORM\PersistentCollection":private] => NULL 
     ["isDirty":"Doctrine\ORM\PersistentCollection":private] => bool(false) 
     ["initialized":"Doctrine\ORM\PersistentCollection":private] => bool(false) 
     ["coll":"Doctrine\ORM\PersistentCollection":private] => object(Doctrine\Common\Collections\ArrayCollection)#33 (1) { 
      ["_elements":"Doctrine\Common\Collections\ArrayCollection":private] => array(0) { 

      } 
     } 
    } 
} 

我希望用戶訪問取決於某些功能他組(s)...所以對於我來說這不是真的很難得到這些團體。 有什麼想法?

我陽明模型配置文件:

Me\MyProject\CoreBundle\Entity\User: 
type: entity 
repositoryClass: FSB\Intranet\CoreBundle\Repository\UserRepository 
table: users 
fields: 
    id: 
     id: true 
     type: integer 
     unsigned: false 
     nullable: false 
     generator: 
      strategy: IDENTITY 
[...] 
manyToMany: 
    groups: 
     targetEntity: Usergroup 
     inversedBy: users 
     joinTable: 
      name: usergroups_for_user 
      joinColumns: 
       user_id: 
        referencedColumnName: id 
      inverseJoinColumns: 
       usergroup_id: 
        referencedColumnName: id 
lifecycleCallbacks: { } 

回答

2

學說,當你調用函數getGroups因爲,在默認情況下,急切模式是無效的只加載的ArrayCollection _elements。 getGroups()函數的結果是什麼?

EAGER模式(例如:@ManyToOne(targetEntity="\My\Model\User\User", fetch="EAGER"))強制doctrine2加載所有數據。

+0

getGroups()也會返回一個空集合,但我沒有強制使用EAGER模式。你如何處理yml? –

+0

也許你可以使用'fetch:eager'或'fetchmode:eager'。對不起,但我不使用yml語法。我想看看yml配置文件。 – jeremieca

+0

我編輯過。 提取:渴望提出錯誤,並fetchmode:渴望不會改變什麼:( –