2016-08-16 99 views
2

我有許多對用戶和組之間的關係,但是當我想訪問用戶的所有組時,我會得到空集合。學說2 - ManyToMany關係 - 空集合

namespace LoginBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 

/** 
* @ORM\Entity 
* @ORM\Table(name="User") 
*/ 
class User 
{ 
    /** 
    * @ORM\Column(type="integer", name="id") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $_iId; 

    /** 
    * @ORM\Column(type="string", name="login", length=45) 
    */ 
    private $_sLogin; 

    /** 
    * @ORM\ManyToMany(targetEntity="GroupBundle\Entity\Group", inversedBy="_aUser") 
    * @ORM\JoinTable(name="Group_x_User", 
    *  joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")} 
    *  ) 
    */ 
    private $_aGroup; 

    public function __construct() { 
     $this->_aGroup = new ArrayCollection(); 
    } 

    /** 
    * Get iId 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->_iId; 
    } 

    /** 
    * Set sLogin 
    * 
    * @param string $sLogin 
    * 
    * @return User 
    */ 
    public function setLogin($sLogin) 
    { 
     $this->_sLogin = $sLogin; 

     return $this; 
    } 

    /** 
    * Get sLogin 
    * 
    * @return string 
    */ 
    public function getLogin() 
    { 
     return $this->_sLogin; 
    } 

    public function getGroups() 
    { 
     return $this->_aGroup; 
    } 

用戶和組使用Group_x_User表來存儲它們的關係。

namespace GroupBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 

/** 
* @ORM\Entity 
* @ORM\Table(name="Group") 
*/ 
class Group 
{ 
    /** 
    * @ORM\Column(type="integer", name="id") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $_iId; 

    /** 
    * @ORM\Column(type="string", name="name", length=45) 
    */ 
    private $_sName; 

    /** 
    * @ORM\ManyToMany(targetEntity="LoginBundle\Entity\User", mappedBy="_aGroup") 
    */ 
    private $_aUser; 

    public function __construct() { 
     $this->_aUser = new ArrayCollection(); 
    } 

    /** 
    * Get iId 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->_iId; 
    } 

    /** 
    * Set sName 
    * 
    * @param string $sName 
    * 
    * @return Group 
    */ 
    public function setName($sName) 
    { 
     $this->_sName = $sName; 

     return $this; 
    } 

    /** 
    * Get sName 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->_sName; 
    } 

    public function getUsers() 
    { 
     return $this->_aUser; 
    } 
} 

對於從數據庫恢復數據我使用的代碼:

$oUser = $this->getDoctrine() 
     ->getRepository('LoginBundle:User') 
     ->find(2); 
$aGroup = $oUser->getGroups(); 

可惜的是$ aGroup集合包含0個元素的陣列,而在數據庫是被匹配的記錄。我在映射中缺少什麼?

回答

0

您的User類缺少一些東西。您只能使用ArrayCollection來聲明_aGroup。這還不夠。您必須將數據存儲到ArrayCollection

將此添加到User類中。

public class addGroups(\GroupBundle\Entity\Group $group) 
{ 
    $group->addUsers($this); 
    $this->_aGroup->add($group); 
} 

這是用於Group類。

public class addUsers(\LoginBundle\Entity\User $user) 
{ 
    if (!$this->_aUser->contains($user)) { 
     $this->_aUser->add($user); 
    } 
} 

欲瞭解更多信息,你可以訪問這個link

+0

可能你的意思是公共職能。我已經將這個函數添加到兩個類中,但仍然是集合是空的。 – Beacze

0

用戶:: $ _ aGroup定義上的@ORM \ JoinTable()註釋語法旨在用於自引用關係Doctrine documentation

嘗試使用簡化的語法:

​​

如果使用共同的規範(「ID」爲標識的列名,依此類推)學說和Symfony的將完成剩下的爲您服務。