ManyToMany上的Getter返回空数组

时间:2015-03-17 09:10:35

标签: php symfony orm doctrine

我有一个包含两个实体的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

1 个答案:

答案 0 :(得分:1)

我在您的代码中看到了错误:

    public function __construct(){
        $beneficiaires = new ArrayCollection();
    }

你应该使用:

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

但更好的做法是创建:属性,然后使用命令:doctrine:generate:entity,它会自动添加所有的setter和getter。