public function addAction(Request $request) { // On récupère l'EntityManager $em = $this->getDoctrine()->getManager(); // Création de l'entité Advert $advert = new Advert(); $advert->setTitle('Recherche développeur Symfony2.'); $advert->setAuthor('Alexandre'); $advert->setContent("Nous recherchons un développeur Symfony2 débutant sur La Talaudière. Blabla…"); $advert->updateDate(); $application1 = new Application(); $application1->setAuthor('Marine'); $application1->setContent("J'ai toutes les qualités requises."); // Création d'une deuxième candidature par exemple $application2 = new Application(); $application2->setAuthor('Pierre'); $application2->setContent("Je suis très motivé."); // On lie les candidatures à l'annonce $application1->setAdvert($advert); $application2->setAdvert($advert); // On récupère toutes les compétences possibles $listSkills = $em->getRepository('EmilienPlatformBundle:Skill')->findAll(); // Pour chaque compétence foreach ($listSkills as $skill) { // On crée une nouvelle « relation entre 1 annonce et 1 compétence » $advertSkill = new AdvertSkill(); // On la lie à l'annonce, qui est ici toujours la même $advertSkill->setAdvert($advert); // On la lie à la compétence, qui change ici dans la boucle foreach $advertSkill->setSkill($skill); // Arbitrairement, on dit que chaque compétence est requise au niveau 'Expert' $advertSkill->setLevel('Expert'); // Et bien sûr, on persiste cette entité de relation, propriétaire des deux autres relations $em->persist($advertSkill); } // Doctrine ne connait pas encore l'entité $advert. Si vous n'avez pas définit la relation AdvertSkill // avec un cascade persist (ce qui est le cas si vous avez utilisé mon code), alors on doit persister $advert $em->persist($advert); $em->persist($application1); $em->persist($application2); // On déclenche l'enregistrement $em->flush(); // Reste de la méthode qu'on avait déjà écrit if ($request->isMethod('POST')) { $request->getSession()->getFlashBag()->add('notice', 'Annonce bien enregistrée.'); return $this->redirect($this->generateUrl('oc_platform_view', array('id' => $advert->getId()))); } return $this->render('EmilienPlatformBundle:Advert:add.html.twig'); }
/** * Add application * * @param \Emilien\PlatformBundle\Entity\Application $application * * @return Advert */ public function addApplication(Application $application) { $this->applications[] = $application; //liaison de l'annonce a la candidature $application->setAdvert($this); return $this; }