Symfony 3多对多没有将数据保存到ManyToMany表

I started project with predefined database structure and generated Entities from database structure using commands from console. I am creating bus company. Bus can have many amenities (i.e. Many buses can have many amenities).

I have a ManyToMany table and for some reason data inside that table is not saving. Other form data is saved in other table but this one still remains empty.

Does someone knows where is the problem?

Here is the code:

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);
    }

Controller:

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(),
        ];
    }


}

EDIT 1: Added form

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';
    }


}

I think the problem is in your BusVehicles.php, Check relation and change as per below:

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

And in Aminities Entity change as per below:

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