Php Symfony 3多对多不将数据保存到多对多表

Php Symfony 3多对多不将数据保存到多对多表,php,mysql,symfony,doctrine,symfony-3.1,Php,Mysql,Symfony,Doctrine,Symfony 3.1,我使用预定义的数据库结构启动项目,并使用控制台中的命令从数据库结构生成实体。我正在创建公共汽车公司。公共汽车可以有许多便利设施(即许多公共汽车可以有许多便利设施) 我有一个多个表,由于某种原因,该表中的数据无法保存。其他表单数据保存在其他表中,但此表仍为空 有人知道问题出在哪里吗 代码如下: busvices.php /** * Many Buses have Many Amenities. * @ORM\ManyToMany(targetEntit

我使用预定义的数据库结构启动项目,并使用控制台中的命令从数据库结构生成实体。我正在创建公共汽车公司。公共汽车可以有许多便利设施(即许多公共汽车可以有许多便利设施)

我有一个多个表,由于某种原因,该表中的数据无法保存。其他表单数据保存在其他表中,但此表仍为空

有人知道问题出在哪里吗

代码如下:

busvices.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();
    }
} 
com.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';
    }


}

我想问题出在你的
公交车上。php
,请检查关系并按以下方式进行更改:

/**
     * Many Buses have Many Amenities.
     * @ORM\ManyToMany(targetEntity="Amenities", inversedBy="bus_amenities", cascade={"persist"})
     * 
     */
    private $amenities;
/**
 * @var ArrayCollection
 *
 * @ORM\ManyToMany(targetEntity="BusVehicles", mappedBy="amenities", cascade={"persist"})
 */
private $bus_amenities;
实体变更如下所示:

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

谢谢你的回答。我改为“便利设施”,数据仍然没有保存。我尝试了你的代码。数据仍然没有保存。我手动创建了公交设施。也许这就是问题所在?你能粘贴你的表格吗?谢谢你抽出时间。我又加了一句。