2016-08-16 3 views
2

나는 사용자와 그룹간에 많은 관계가 많지만 사용자를위한 모든 그룹에 액세스하려면 빈 모음을 가져야합니다.Doctrine 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 테이블을 사용합니다. 데이터베이스에 매칭되는 기록이있는 동안

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

Unfortunatelly $ aGroup 컬렉션 0 요소들의 어레이를 포함 데이터베이스에서 데이터를 복원하는

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; 
    } 
} 

는 I 코드를 사용한다. 매핑에서 무엇을 놓치고 있습니까?

답변

0

User 클래스에 누락 된 것이 있습니다. 으로 _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

@ORM \ JoinTable() 주석 구문 : User :: $ _ a 그룹 정의는 자체 참조 관계 Doctrine documentation에 사용하기위한 것입니다. 단순화 된 구문을 사용하여

보십시오 : 당신이 일반적인 규칙 (등등 식별자에 대한 열 이름 '아이디', 그리고)를 사용하는 경우

@JoinTable(name="Group_x_User") 

는 교리와 심포니 당신을위한 나머지를 할 것입니다.

관련 문제