2017-04-03 4 views
1

I 서식 모음 포함. 새 레코드를 추가 할 때 외래 키는 항상 null입니다.Symfony 3 외래 키를 유지하지 않는 양식 모음

누군가가 문제를 알고 있습니까? 결과를 반복하고 각 레코드를 유지하려고했지만 외래 키는 여전히 null입니다.

컨트롤러 :

public function newAction(Request $request) 
    { 
     $bus = new BusVehicles(); 
     $busAmenities = new BusVehiclesAmenities(); 
     // dump ($busAmenities); 
     // $this->getDoctrine()->getManager()->persist($busAmenities); 
     $bus->addBusVehiclesAmenities($busAmenities); 
     $form = $this->createForm(BusVehiclesType::class, $bus); 
     $form->handleRequest($request); 
     if ($form->isSubmitted() && $form->isValid()) { 

      $em = $this->getDoctrine()->getManager(); 
      $form->get('busVehiclesAmenities')->getData()->map(
       function ($amenities) use ($em, $bus) { 

        $bus->addBusVehiclesAmenities($amenities); 
        $em->persist($amenities); 
       } 
      ); 
     // $em->persist($form->get('busVehiclesAmenities')->getData()); 
      $em->persist($bus); 


      // Adding flash message to our user 

      $this->addFlash('success', 'admin.bus.created'); 


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

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

버스 엔티티 (부모)

/** @ORM\OneToMany(
    *  targetEntity="BusVehiclesAmenities", 
    *  mappedBy="busVehicles", 
    *  cascade={"persist"} 
    *) 
    * 
    */ 

    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->addBusVehicles($this); 

     return $this; 
    } 

    /** 
    * Remove busVehiclesAmenities 
    * 
    * @param \AppBundle\Entity\BusVehiclesAmenities $busVehiclesAmenities 
    */ 
    public function removeBusVehiclesAmenities(BusVehiclesAmenities $busVehiclesAmenities) 
    { 
     if (!$this->busVehiclesAmenities->contains($busVehiclesAmenities)) { 
      return; 
     } 
     $this->busVehiclesAmenities->removeElement($busVehiclesAmenities); 
     $busVehiclesAmenities->removeBusVehicles(this); 


    } 

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

    } 

    /** 
    * Set busVehiclesAmenities 
    * 
    * @param \AppBundle\Entity\BusVehiclesAmenities $busVehiclesAmenities 
    * @return ArrayCollection 
    */ 
    public function setBusVehiclesAmenities($busVehiclesAmenities) 
    { 
     $this->busVehiclesAmenities = $busVehiclesAmenities; 

    } 

버스 편의 시설 엔티티 (아동) : 당신은 양방향 연관으로 BusVehicle 및 편의 시설 매핑

/** 
    * 
    * @ORM\ManyToOne(targetEntity="\AppBundle\Entity\BusVehicles", inversedBy="busVehiclesAmenities") 
    * @ORM\JoinColumn(name="bus_vehicles_id", referencedColumnName="id") 
    */ 
    private $busVehicles; 

    /** 
    * 
    * @ORM\ManyToOne(targetEntity="\AppBundle\Entity\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 getBusVehicles() 
    { 
     return $this->busVehicles; 
    } 

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

     $this->busVehicles = $busVehicles; 

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


     return $this; 
    } 

    /** 
    * Remove bus 
    * 
    * @param \AppBundle\Entity\BusVehicles 
    * 
    * @return BusVehiclesAmenities 
    */ 
    public function removeBusVehicles(BusVehicles $busVehicles = null) 
    { 

     $this->busVehicles = null; 

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


     return $this; 
    } 

답변

0

. 어메니티에 BusVehicle을 설정하지 않았으므로 편의 시설에 대한 오류는 null입니다. 편의 시설 클래스 setBusVehicle() :

당신은, 말을하는 방법을 구현해야

양방향 매핑을 사용하여, 당신은 양쪽에서 개체를 설정해야합니다.

+0

몇 가지 팁 : Entity 클래스 이름에 복수형을 사용하지 않을 것이므로 나쁜 습관입니다. 그리고 정말로 필요하지 않으면 양방향 매핑을 사용하지 않을 것입니다. –

+0

제안 해 주셔서 감사합니다. 최대한 빨리 수업 이름을 수정하고 제안 사항을 적용 할 것입니다. – jureispro

+0

제안 해 주셔서 감사합니다. 이미 제안한 코드를 구현했으며 이벤트를 버스 테이블에 저장할 수 없습니다. 그것은 단순히 지속되지 않습니다. – jureispro