我有一个包含两个实体的symfony2 / Doctrine项目:
项目和用户
项目可以拥有多个所有者,而用户可以是多个项目的所有者。
所以我试图在这些实体之间建立一个manyToMany关联。
我们走了:
项目:
/**
* Projet
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="Acme\Bundle\ProjetBundle\Entity\ProjetRepository")
*/
class Projet
{
//some properties
/**
* @ORM\ManyToMany(targetEntity="Acme\Bundle\UserBundle\Entity\Utilisateurs"), cascade={"all"}, fetch="EAGER")
* @ORM\JoinTable(name="Beneficiaire", joinColumns={@ORM\JoinColumn(name="projet_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}
* )
**/
private $beneficiaires;
public function __construct(){
$beneficiaires = new ArrayCollection();
}
public function addBeneficiaire(Utilisateurs $u){
$this->beneficiaires[] = $u;
return $this;
}
public function removeBeneficiaire(Utilisateurs $u){
$this->beneficiaires->removeElement($u);
}
public function getBeneficiaires(){
return $this->beneficiaires;
}
用户:
/**
* Utilisateurs
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="Acme\Bundle\UserBundle\Entity\UtilisateursRepository")
*/
class Utilisateurs extends BaseUser
{
//no property about Projet
}
当我将用户添加到项目中时:
$projet->addBeneficiaire($this->get('security.token_storage')->getToken()->getUser());
它填满了正确的表格:
select * from Beneficiaire;
+-----------+---------+
| projet_id | user_id |
+-----------+---------+
| 8 | 3 |
+-----------+---------+
1 row in set (0.00 sec)
但是当我试图访问它时:
/**
* @Route("/projet/{idprojet}")
* @Template()
*/
public function projetAction($idprojet)
{
$projet = $this->getDoctrine()->getRepository('Acme:Projet')->findOneById($idprojet);
if (!$projet) {
return new Response("Projet Introuvable !");
}
//Triggers the request
$projet->getBeneficiaires();
return $this->render('Acme:Default:index.html.twig', array("projet" => $projet));
}
阵列"受益者"在项目中是空的:
Projet {#515 ▼
-id: 8
-nom: "blou2"
-description: "blou"
-beneficiaires: PersistentCollection {#516 ▼
-snapshot: []
-owner: Projet {#515}
-association: array:19 [ …19]
-em: EntityManager {#120 …10}
-backRefFieldName: null
-typeClass: ClassMetadata {#86 …}
-isDirty: false
-initialized: false
-coll: ArrayCollection {#517 ▼
-_elements: []
}
}
}
任何想法在这里有什么不对?
非常感谢!
编辑
count($projet->getBeneficiaires());
返回1
答案 0 :(得分:1)
我在您的代码中看到了错误:
public function __construct(){
$beneficiaires = new ArrayCollection();
}
你应该使用:
public function __construct(){
$this->beneficiaires = new ArrayCollection();
}
但更好的做法是创建:属性,然后使用命令:doctrine:generate:entity
,它会自动添加所有的setter和getter。