폼을 추가하는 버스를 생성해야합니다. 버스에는 많은 편의 시설이있을 수 있으므로 버스와 버스 편의 시설 간의 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(),
];
}
의 호출 있다는 것을 알 게시물에서 항목을 제거하고 있습니까? 왜냐하면 당신의 코드는 괜찮아 보입니다. – DonCallisto
@DonCallisto. 그래, 나는 확신한다. 양식 데이터를 디버깅 할 때 편집되고 양식으로 전송 된 데이터를 얻습니다. 원하는 경우 디버그 출력을 표시 할 수 있습니다. – jureispro
아니요, 그럴 필요는 없지만 이상한 행동처럼 들립니다. – DonCallisto