2017-03-28 7 views
2

フォームを追加するバスを作成する必要があります。バスには多くのアメニティがあるので、バスとバスアメニティの間にOneToMany関係を作りました。symfony 3 orphanRemoval = trueはフォームから削除されたレコードを削除しません

私が達成したいのは、DoctrineにOneToManyテーブルからデータを削除する(または更新する)ことです。私はあなたがorphanRemoval =真それの世話をしますが、何らかの理由でそれが動作しないエンティティに注釈...私は、既存を更新し、新たな設備を追加することができます

(新しいデータを使用することができることをどこかで読ん)私は以前に編集フォームから削除したレコードは削除できません。

それは使用して行うことができorphanRemoval =真または私のコードに問題がある場合、誰かが知っているん:

バスエンティティ(ショートバージョン):

ここ

コードです

/** 
    * @ORM\OneToMany(targetEntity="BusVehiclesAmenities", mappedBy="bus", cascade={"persist", "remove"}, orphanRemoval=true) 
    */ 
    private $busVehiclesAmenities; 

    public function __construct() 
    { 

     $this->busVehiclesAmenities = new ArrayCollection(); 
    } 



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

    /** 
    * Add busVehiclesAmenities 
    * 
    * @param \AppBundle\Entity\BusVehiclesAmenities busVehiclesAmenities 
    * @return BusVehicles 
    */ 
    public function addBusVehiclesAmenities(BusVehiclesAmenities $busVehiclesAmenities) 
    { 

     /* if ($this->busVehiclesAmenities->contains($busVehiclesAmenities)) { 
      return; 
     }*/ 
     $this->busVehiclesAmenities->add($busVehiclesAmenities); 
     $busVehiclesAmenities->addBus($this); 

     return $this; 
    } 

    /** 
    * Remove busVehiclesAmenities 
    * 
    * @param \AppBundle\Entity\BusVehiclesAmenities $busVehiclesAmenities 
    */ 
    public function removeBusVehiclesAmenities(BusVehiclesAmenities $busVehiclesAmenities) 
    { 
     $this->busVehiclesAmenities->removeElement($busVehiclesAmenities); 
     $busVehiclesAmenities->addBus(null); 


    } 
    /** 
    * Get busVehiclesAmenities 
    * 
    * @return ArrayCollection 
    */ 
    public function getBusVehiclesAmenities() 
    { 
     return $this->busVehiclesAmenities; 

    } 
    /** 
    * Set busVehiclesAmenities 
    * 
    * @return ArrayCollection 
    */ 
    public function setBusVehiclesAmenities($busVehiclesAmenities) 
    { 
     $this->busVehiclesAmenities = $busVehiclesAmenities; 

    } 

アメニティエンティティ:

private $bus; 
/** 
* 
* @ORM\ManyToOne(targetEntity="Amenities", inversedBy="amenities") 
* @ORM\JoinColumn(name="amenities_id", referencedColumnName="id") 
* 
*/ 
private $amenities; 

/** 
* @var float 
* @ORM\Column(name="price", type="float", scale=2) 
*/ 
protected $price; 

public function __construct() 
{ 
} 


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


/** 
* Get busId 
* 
* @return integer 
*/ 
public function getBus() 
{ 
    return $this->bus; 
} 

/** 
* Add bus 
* 
* @param \AppBundle\Entity\BusVehicles 
* 
* @return BusVehiclesAmenities 
*/ 
public function addBus(BusVehicles $bus) 
{ 

    $this->bus = $bus; 

    //$bus->setBusVehiclesAmenities($this); 


    return $this; 
} 

コントローラー:

public function editAction($id, Request $request) 
    { 
     $busRepository = $this->getDoctrine()->getRepository('AppBundle:BusVehicles'); 
     $bus = $busRepository->find($id); 
     $editForm = $this->createForm(BusVehiclesType::class, $bus); 
     $editForm->handleRequest($request); 
     if ($editForm->isSubmitted() && $editForm->isValid()) { 

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

      $entity = $editForm->getData(); 
      dump ($entity); 
      $em->persist($entity); //this should take care of everything saving the manyToMany records 

      $em->flush(); 

      // Adding flash message to our user 

      $this->addFlash('success', 'New vehicle successfully added'); 


      // return $this->redirectToRoute('bus_add'); 

     } 
     return [ 
      'form' => $editForm->createView(), 
     ]; 
    } 
+0

あなたはよろしいですが呼んでいることに気付きます投稿からアイテムを削除していますか?あなたのコードは上手く見えるので。 – DonCallisto

+0

@DonCallisto。うん、私は確信しています。私がフォームデータをデバッグするとき)私は編集され、フォームに送られたデータを取得します。あなたが望むなら、出力をデバッグすることができます。 – jureispro

+0

いいえ、それは必要ではありませんが、本当に奇妙な動作のように聞こえます。 – DonCallisto

答えて

0

私は同じ問題を抱えていますが、コードを見てよ、私はあなたが

$busVehiclesAmenities->addBus(null); 

代わりの

$busVehiclesAmenities->setBus(null); 
関連する問題