2017-03-28 1 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); 
관련 문제