2014-07-25 27 views
0

我想在我的表格删除一个项目,但什么也没有发生(甚至不是一个错误......但没有问题,我可以编辑!)Symfony的2 - 形式收集从一对多的关系删除项目

我有

在一对多

名为“MentionLegaleNv1”第一级
class MentionLegaleNv1 { 

    /** 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\Column(name="titre", type="string", length=50, nullable=false) 
    */ 
    private $titre; 

    /** 
    * @ORM\OneToMany(targetEntity="MentionLegaleNv2", mappedBy="MentionsLegalesNv1", cascade={"persist", "remove"}) 
    */ 
    private $MentionsLegalesNv2; 

    /** 
    * Constructor 
    */ 
    public function __construct() { 
     $this->MentionsLegalesNv2 = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() { 
     return $this->id; 
    } 

    /** 
    * Set titre 
    * 
    * @param string $titre 
    * @return MentionLegaleNv1 
    */ 
    public function setTitre($titre) { 
     $this->titre = $titre; 

     return $this; 
    } 

    /** 
    * Get titre 
    * 
    * @return string 
    */ 
    public function getTitre() { 
     return $this->titre; 
    } 

    /** 
    * Add MentionsLegalesNv2 
    * 
    * @param \Video2Learn\BddBundle\Entity\MentionLegaleNv2 $mentionsLegalesNv2 
    * @return MentionLegaleNv1 
    */ 
    public function addMentionsLegalesNv2(\Video2Learn\BddBundle\Entity\MentionLegaleNv2 $mentionsLegalesNv2) { 
     $mentionsLegalesNv2->setMentionLegaleNv1($this); 
     $this->MentionsLegalesNv2[] = $mentionsLegalesNv2; 

     return $this; 
    } 

    /** 
    * Remove MentionsLegalesNv2 
    * 
    * @param \Video2Learn\BddBundle\Entity\MentionLegaleNv2 $mentionsLegalesNv2 
    */ 
    public function removeMentionsLegalesNv2(\Video2Learn\BddBundle\Entity\MentionLegaleNv2 $mentionsLegalesNv2) { 
     $this->MentionsLegalesNv2->removeElement($mentionsLegalesNv2); 
    } 

    /** 
    * Get MentionsLegalesNv2 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getMentionsLegalesNv2() { 
     return $this->MentionsLegalesNv2; 
    } 
:有3个级别(这是关于划分子级我的网站的法律声明)

这里是我的实体嵌入表单的Collection

第二名为 “MentionLegaleNv2” 的多对一和一对多

class MentionLegaleNv2 { 

    /** 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\Column(name="titre", type="string", length=50, nullable=false) 
    */ 
    private $titre; 

    /** 
    * @ORM\OneToMany(targetEntity="MentionLegaleNv3", mappedBy="MentionsLegalesNv2", cascade={"persist", "remove"}) 
    */ 
    private $MentionsLegalesNv3; 

    /** 
    * @ORM\ManyToOne(targetEntity="MentionLegaleNv1", inversedBy="MentionsLegalesNv2") 
    */ 
    private $MentionsLegalesNv1; 

    /** 
    * Constructor 
    */ 
    public function __construct() { 
     $this->MentionsLegalesNv3 = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() { 
     return $this->id; 
    } 

    /** 
    * Set titre 
    * 
    * @param string $titre 
    * @return MentionLegaleNv2 
    */ 
    public function setTitre($titre) { 
     $this->titre = $titre; 

     return $this; 
    } 

    /** 
    * Get titre 
    * 
    * @return string 
    */ 
    public function getTitre() { 
     return $this->titre; 
    } 

    /** 
    * Add MentionsLegalesNv3 
    * 
    * @param \Video2Learn\BddBundle\Entity\MentionLegaleNv3 $mentionsLegalesNv3 
    * @return MentionLegaleNv2 
    */ 
    public function addMentionsLegalesNv3(\Video2Learn\BddBundle\Entity\MentionLegaleNv3 $mentionsLegalesNv3) { 
     $mentionsLegalesNv3->setMentionLegaleNv2($this); 
     $this->MentionsLegalesNv3[] = $mentionsLegalesNv3; 

     return $this; 
    } 

    /** 
    * Remove MentionsLegalesNv3 
    * 
    * @param \Video2Learn\BddBundle\Entity\MentionLegaleNv3 $mentionsLegalesNv3 
    */ 
    public function removeMentionsLegalesNv3(\Video2Learn\BddBundle\Entity\MentionLegaleNv3 $mentionsLegalesNv3) { 
     $this->MentionsLegalesNv3->removeElement($mentionsLegalesNv3); 
    } 

    /** 
    * Get MentionsLegalesNv3 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getMentionsLegalesNv3() { 
     return $this->MentionsLegalesNv3; 
    } 

    /** 
    * Set MentionsLegalesNv1 
    * 
    * @param \Video2Learn\BddBundle\Entity\MentionLegaleNv1 $mentionsLegalesNv1 
    * @return MentionLegaleNv2 
    */ 
    public function setMentionsLegalesNv1(\Video2Learn\BddBundle\Entity\MentionLegaleNv1 $mentionsLegalesNv1 = null) { 
     $this->MentionsLegalesNv1 = $mentionsLegalesNv1; 

     return $this; 
    } 

    /** 
    * Get MentionsLegalesNv1 
    * 
    * @return \Video2Learn\BddBundle\Entity\MentionLegaleNv1 
    */ 
    public function getMentionsLegalesNv1() { 
     return $this->MentionsLegalesNv1; 
    } 

名为 “MentionLegaleNv3” 在多对一

class MentionLegaleNv3 { 

    /** 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\Column(name="titre", type="string", length=50, nullable=false) 
    */ 
    private $titre; 

    /** 
    * @ORM\Column(name="description", type="string", length=500, nullable=false) 
    */ 
    private $description; 

    /** 
    * @ORM\Column(name="removeTuto", type="boolean", nullable=false) 
    */ 
    private $removeTuto; 

    /** 
    * @ORM\ManyToOne(targetEntity="MentionLegaleNv2", inversedBy="MentionsLegalesNv3") 
    * @ORM\JoinColumn(referencedColumnName="id", nullable=false) 
    */ 
    private $MentionsLegalesNv2; 


    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set titre 
    * 
    * @param string $titre 
    * @return MentionLegaleNv3 
    */ 
    public function setTitre($titre) 
    { 
     $this->titre = $titre; 

     return $this; 
    } 

    /** 
    * Get titre 
    * 
    * @return string 
    */ 
    public function getTitre() 
    { 
     return $this->titre; 
    } 

    /** 
    * Set description 
    * 
    * @param string $description 
    * @return MentionLegaleNv3 
    */ 
    public function setDescription($description) 
    { 
     $this->description = $description; 

     return $this; 
    } 

    /** 
    * Get description 
    * 
    * @return string 
    */ 
    public function getDescription() 
    { 
     return $this->description; 
    } 

    /** 
    * Set removeTuto 
    * 
    * @param boolean $removeTuto 
    * @return MentionLegaleNv3 
    */ 
    public function setRemoveTuto($removeTuto) 
    { 
     $this->removeTuto = $removeTuto; 

     return $this; 
    } 

    /** 
    * Get removeTuto 
    * 
    * @return boolean 
    */ 
    public function getRemoveTuto() 
    { 
     return $this->removeTuto; 
    } 

    /** 
    * Set MentionsLegalesNv2 
    * 
    * @param \Video2Learn\BddBundle\Entity\MentionLegaleNv2 $mentionsLegalesNv2 
    * @return MentionLegaleNv3 
    */ 
    public function setMentionsLegalesNv2(\Video2Learn\BddBundle\Entity\MentionLegaleNv2 $mentionsLegalesNv2) 
    { 
     $this->MentionsLegalesNv2 = $mentionsLegalesNv2; 

     return $this; 
    } 

    /** 
    * Get MentionsLegalesNv2 
    * 
    * @return \Video2Learn\BddBundle\Entity\MentionLegaleNv2 
    */ 
    public function getMentionsLegalesNv2() 
    { 
     return $this->MentionsLegalesNv2; 
    } 

这里是FormType最后一个级别:

MentionsLegalesNv1Type:

class MentionLegaleNv1Type extends AbstractType { 

    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) { 
     $builder 
       ->add('MentionsLegalesNv2', 'collection', array(
        'type' => new MentionLegaleNv2Type(), 
        'prototype' => true, 
        'by_reference' => false, 
        'allow_add' => true, 
        'allow_delete' => true, 
        'error_bubbling' => false, 
        'label' => false, 
        'cascade_validation' => true, 
        'options' => array(
         'label' => false, 
        ), 
        'attr' => array(
         'class' => 'MentionsLegalesNv2 list-unstyled', 
        ) 
       )) 
       ->add('Valider', 'submit', array(
        'attr' => array(
         'class' => 'suivant btn btn-success', 
         'formnovalidate' => 'formnovalidate', 
        ) 
       )) 
     ; 
    } 

    /** 
    * @param OptionsResolverInterface $resolver 
    */ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) { 
     $resolver->setDefaults(array(
      'data_class' => 'Video2Learn\BddBundle\Entity\MentionLegaleNv1', 
      'cascade_validation' => true, 
     )); 
    } 

    /** 
    * @return string 
    */ 
    public function getName() { 
     return 'video2learn_administrationbundle_mentionlegalenv1'; 
    } 

} 

MentionsLegalesNv2Type:

class MentionLegaleNv2Type extends AbstractType { 

    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) { 
     $builder 
       ->add('titre', 'text', array(
        'required' => true, 
        'label' => false, 
        'attr' => array(
         'placeholder' => 'Mention Légales NV1 n°#', 
         'class' => 'form-control', 
         'title' => 'Titre de la Mention Legale NV1 n°#' 
        ) 
       )) 
       ->add('MentionsLegalesNv3', 'collection', array(
        'type' => new MentionLegaleNv3Type(), 
        'prototype' => true, 
        'by_reference' => false, 
        'allow_add' => true, 
        'cascade_validation' => true, 
        'allow_delete' => true, 
        'error_bubbling' => false, 
        'label' => false, 
        'options' => array(
         'label' => false // sert à supprimer les index 
        ), 
        'attr' => array(
         'class' => 'MentionsLegalesNv3 list-unstyled', 
        ) 
       )) 
     ; 
    } 

    /** 
    * @param OptionsResolverInterface $resolver 
    */ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) { 
     $resolver->setDefaults(array(
      'data_class' => 'Video2Learn\BddBundle\Entity\MentionLegaleNv2', 
      'cascade_validation' => true, 
     )); 
    } 

    /** 
    * @return string 
    */ 
    public function getName() { 
     return 'video2learn_administrationbundle_mentionlegalenv2'; 
    } 

} 

MentionsLegalesNv3Type:

class MentionLegaleNv3Type extends AbstractType { 

    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) { 
     $builder 
       ->add('titre', 'text', array(
        'required' => true, 
        'label' => 'Titre Paragraphe', 

       )) 
       ->add('description','textarea', array(
        'required' => true, 
        'label' => 'Description Paragraphe', 

       )) 
       ->add('removeTuto') 
     ; 
    } 

    /** 
    * @param OptionsResolverInterface $resolver 
    */ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) { 
     $resolver->setDefaults(array(
      'data_class' => 'Video2Learn\BddBundle\Entity\MentionLegaleNv3', 
      'cascade_validation' => true, 
     )); 
    } 

    /** 
    * @return string 
    */ 
    public function getName() { 
     return 'video2learn_administrationbundle_mentionlegalenv3'; 
    } 

} 

而且我的控制器:

class MentionsLegalesController extends Controller { 

    public function mentionLegalesAction(Request $request) { 

     $em = $this->getDoctrine()->getManager(); 

     $ML = $em->getRepository('Video2LearnBddBundle:MentionLegaleNv0')->findOneById(1); 

     if ($request->getMethod() == 'GET') { 

       $form = $this->createForm(new MentionLegaleNv0Type(), $ML); 
     } 

     if ($request->isMethod('POST')) { 
      $form = $this->createForm(new MentionLegaleNv0Type(), $ML); 
      $form->handleRequest($request); 

      if ($form->isValid()) { 
       $ML = $form->getData(); 
       $em->persist($ML); 
       $em->flush(); 
       return $this->redirect($this->generateUrl('administration_mentions_legales')); 
      } 
     } 

     return $this->render('Video2LearnAdministrationBundle:Pages:mentions_legales.html.twig', array(
        'form' => $form->createView(), 

     )); 
    } 

} 

我发现的Symfony的食谱(http://symfony.com/doc/current/cookbook/form/form_collections.html),我试过,但没有成功......

class MentionsLegalesController extends Controller { 

    public function mentionLegalesAction(Request $request) { 

     $em = $this->getDoctrine()->getManager(); 

     $ML = $em->getRepository('Video2LearnBddBundle:MentionLegaleNv1')->findOneById(1); 

     foreach ($ML->getMentionsLegalesNv2() as $tag) { 
      $originalTags->add($tag); 
     } 
     if ($request->getMethod() == 'GET') { 
      $form = $this->createForm(new MentionLegaleNv1Type(), $ML); 
     } 

     if ($request->isMethod('POST')) { 
      $form = $this->createForm(new MentionLegaleNv1Type(), $ML); 
      $form->handleRequest($request); 

      if ($form->isValid()) { 
       foreach ($originalTags as $tag) { 
        if ($ML->getMentionsLegalesNv2()->contains($tag) == false) { 
         $em->persist($tag); 
        } 
       } 

       $em->persist($ML); 
       $em->flush(); 

       return $this->redirect($this->generateUrl('administration_mentions_legales')); 
      } 
     } 

     return $this->render('Video2LearnAdministrationBundle:Pages:mentions_legales.html.twig', array(
        'form' => $form->createView(), 
     )); 
    } 

} 

如何删除MentionLegaleNv2或MentionLegaleNv3中的项?

感谢您的帮助!

回答

0

我没有通过其他方式...

我这样做:

if ($form->isValid()) { 

      // supprime la relation entre le tag et la « Task » 
      foreach ($originalMentionsLegalesNv1 as $mlnv2) { 
       if ($MentionsLegalesNv1->getMentionsLegalesNv2()->contains($mlnv2) == false) { 

        $em->remove($mlnv2); 
       } 
      } 

      $em->persist($MentionsLegalesNv1); 
      $em->flush(); 
0

你删除的方法应自动更新在你的添加方法不喜欢相同的方式连接的对象..

/** 
* Remove MentionsLegalesNv2 
* 
* @param \Video2Learn\BddBundle\Entity\MentionLegaleNv2 $mentionsLegalesNv2 
*/ 
public function removeMentionsLegalesNv2(MentionLegaleNv2 $mentionsLegalesNv2) { 
    $this->MentionsLegalesNv2->removeElement($mentionsLegalesNv2); 
    $mentionsLegalesNv2->setMentionLegaleNv1(null); 
} 
+0

您好!感谢您的帮助...我尝试了您的解决方案,但我有这个错误消息:“尝试在/Users/thomasmelcer/Sites/Video2Learn.fr/src类”Video2Learn \ BddBundle \ Entity \ MentionLegaleNv2“上调用方法setMentionLegaleNv1” /Video2Learn/BddBundle/Entity/MentionLegaleNv1.php第89行。您是否打算调用:“addMentionsLegalesNv3”,“getMentionsLegalesNv1”,“getMentionsLegalesNv3”,“setMentionsLegalesNv1”?“ – Zagloo

+1

哦,没关系......这是你写的,但用('s')这样“$ mentionsLegalesNv2-> setMentionSLegaleSNv1(null);” 因此,解决方案工作但是,我想删除数据库中,不只是将其设置为NULL,因为它始终存在于数据库中... – Zagloo

相关问题