簡體   English   中英

Symfony 3多對多不將數據保存到ManyToMany表

[英]Symfony 3 Many To Many not saving data to ManyToMany Table

我從預定義的數據庫結構開始了項目,並使用控制台的命令從數據庫結構生成了實體。 我正在創建公交公司。 公共汽車可以有很多便利設施(即,許多公共汽車可以有許多便利設施)。

我有一個ManyToMany表,由於某種原因該表內的數據無法保存。 其他表單數據保存在其他表中,但此表仍為空。

有人知道問題出在哪里嗎?

這是代碼:

BusVehicles.php

     /**
         * Many Buses have Many Amenities.
         * @ORM\ManyToMany(targetEntity="BusVehicles", mappedBy="bus_amenities")
         * @ORM\JoinTable(
         *  name="bus_amenities",
         *  joinColumns={
         *      @ORM\JoinColumn(name="bus_id", referencedColumnName="id")
         *  },
         *  inverseJoinColumns={
         *      @ORM\JoinColumn(name="amenities_id", referencedColumnName="id")
         *  }
         * )
         */
        private $amenities;
    /**
     * Add items
     *
     * @param \AdminBundle\Entity\Amenities $amenities
     */

    public function addAmenities(Amenities $amenities)
    {
        if ($this->amenities->contains($amenities)) {
            return;
        }
        $this->amenities->add($amenities);
        $amenities->addBusAmenities($this);
    }

    /**
     * Remove amenities
     *
     * @param \AdminBundle\Entity\Amenities $amenities
     */
    public function removeAmenities(Amenities $amenities)
    {
        if (!$this->amenities->contains($amenities)) {
            return;
        }
        $this->amenities->removeElement($amenities);
        $amenities->removeBusAmenities($this);
    }

    /**
     * Get Amenities
     *
     * @return ArrayCollection
     */

    public function getAmenities()
    {
        return $this->amenities;
    }


    // ...

    public function __construct() {
        $this->amenities = new ArrayCollection();
    }
} 

Amenities.php

    /**
     * @var ArrayCollection
     *
     * @ORM\ManyToMany(targetEntity="BusVehicles", mappedBy="amenities")
     */
    private $bus_amenities;

    public function __construct() {
        $this->bus_amenities = new ArrayCollection();
    }
    /**
     * Get bus amenities
     *
     * @return ArrayCollection
     */

    public function getBusAmenities()
    {
        return $this->bus_amenities;
    }



    /**
     * Add bus amenities
     *
     * @param \AdminBundle\Entity\BusVehicles
     */

    public function addBusAmenities(BusVehicles $amenities)
    {

        if ($this->bus_amenities->contains($amenities)) {
            return;
        }
        $this->bus_amenities->add($amenities);
        $amenities->addAmenities($this);


    }

    /**
     * Remove bus amenities
     *
     * @param \AdminBundle\Entity\BusVehicles
     */
    public function removeBusAmenities(BusVehicles $amenities)
    {

        if (!$this->bus_amenities->contains($amenities)) {
            return;
        }
        $this->bus_amenities->removeElement($amenities);
        $amenities->removeAmenities($this);
    }

控制器:

class BusController extends Controller
{
    /**
     * @Template
     */
    public function addAction(Request $request)
    {
        $bus = new BusVehicles();
        $form = $this->createForm(BusVehiclesType::class, $bus);
        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            $em = $this->getDoctrine()->getManager();
           /* $amenities = $em->getAmenities();
            foreach($amenities as $amenitie){
                $em->persist($amenitie);
            }*/
            $em->persist($bus);

            $em->flush();

            // Adding flash message to our user

            $request->getSession()
                ->getFlashBag()
                ->add('success', 'New vehicle successfully added');


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

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


}

編輯1:添加窗體

class BusVehiclesType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('licencePlate')
            ->add('manufacturer')         
            ->add('company', EntityType::class, array(
                'class' => 'AdminBundle:Companies',
                'choice_label' => 'name',
            ))
            ->add('busType', EntityType::class, array(
                'class' => 'AdminBundle:BusTypes',
                'choice_label' => 'type',
            ))
            ->add('emissionClass', EntityType::class, array(
                'class' => 'AdminBundle:BusEmissionClasses',
                'choice_label' => 'name',
            ))
            ->add('fuelType', EntityType::class, array(
                'class' => 'AdminBundle:BusFuelTypes',
                'choice_label' => 'fuel_type',
            ))
            ->add('amenities', EntityType::class, array(
                'class' => 'AdminBundle:Amenities',
                'choice_label' => 'name',
                'multiple' => true,
            ));
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AdminBundle\Entity\BusVehicles'
        ));
    }

    /**
     * {@inheritdoc}
     */
    public function getBlockPrefix()
    {
        return 'adminbundle_busvehicles';
    }


}

我認為問題出在您的BusVehicles.php ,檢查關系並根據以下內容進行更改:

/**
     * Many Buses have Many Amenities.
     * @ORM\ManyToMany(targetEntity="Amenities", inversedBy="bus_amenities", cascade={"persist"})
     * 
     */
    private $amenities;

而在Aminities實體中,更改如下:

/**
 * @var ArrayCollection
 *
 * @ORM\ManyToMany(targetEntity="BusVehicles", mappedBy="amenities", cascade={"persist"})
 */
private $bus_amenities;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM