私はユーザーとグループの間に多くの関係がありますが、ユーザーのすべてのグループにアクセスしたいときは空のコレクションを取得します。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テーブルを使用します。私はコードを使用し、データベースからデータを復元する
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の要素の配列を含んでいます。私のマッピングには何が欠けていますか?
あなたはおそらく公共の機能を意味していました。私は両方のクラスにこの関数を追加しましたが、まだコレクションは空です。 – Beacze