【发布时间】:2015-03-17 09:10:35
【问题描述】:
我有一个包含两个实体的 symfony2/Doctrine 项目:
项目和用户
项目可以有多个所有者,用户可以是多个项目的所有者。
所以我试图在这些实体之间建立一个多对多关联。
我们开始吧:
项目:
/**
* 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));
}
项目中的“beneficiaires”数组为空:
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
【问题讨论】:
-
计数是多少($projet->getBeneficiaires());返回?
-
它返回 1。我将编辑帖子
-
是故意的吗,您没有为受益人设置二传手?也许这就是问题所在?