Mam problem z zapisem formularza przy relacji ManyToMany, ale tylko od strony mapped side.

Mam klasę User. User może być typu Hospital lub Doctor. Hospitals są powiązane z Doctors relacją ManyToMany. Klasa user wygląda tak:

  1. */
  2. class User extends BaseUser
  3. {
  4. /**
  5.   * @ORM\ManyToMany(targetEntity="User", mappedBy="myDoctors", cascade={"remove", "persist"})
  6.   **/
  7. protected $myHospitals;
  8.  
  9. /**
  10.   * @ORM\ManyToMany(targetEntity="User", inversedBy="myHospitals", cascade = {"persist", "remove"})
  11.   * @ORM\JoinTable(name="hospital_doctor",
  12.   * joinColumns={@ORM\JoinColumn(name="hospital_id", referencedColumnName="id")},
  13.   * inverseJoinColumns={@ORM\JoinColumn(name="doctor_id", referencedColumnName="id")}
  14.   * )
  15.   **/
  16. private $myDoctors;
  17.  
  18. //...
  19. }


Mam też formularz, w którym wyświetlam dane Doctora do edycji i teraz chciałem dodać pole, które umożliwi mu wybór szpitali:

  1. $builder
  2. ->add('email')
  3. ->add('myHospitals', null, array(
  4. 'class' => 'DoctorsUserBundle:User',
  5. 'empty_value' => 'Not connected with hospital',
  6. 'empty_data' => null,
  7. 'required' => false,
  8. 'expanded' => true,
  9. 'label' => 'My hospital',
  10. 'query_builder' => function(EntityRepository $er) {
  11. return $er->createQueryBuilder('u')
  12. ->leftJoin('u.hospitalData', 'hd')
  13. ->where('hd.name != :name')
  14. ->setParameter('name', '')
  15. ->orderBy('hd.name', 'ASC');
  16. },
  17. ))
  18. ;
  19.  
  20. // ...


W efekcie dostaję prawidłowo wyglądający formularz, szpitale są wyświetlone jako checkboxy, ale gdy je zaznaczam to te zmiany się nie zapisują. Jednocześnie pole "email" zapisuje zmiany i działa prawidłowo. Nie dostaję żadnych komunikatów. Ten sam problem miałem z inną encją w tym projekcie, która nie miała takiej relacji do samej siebie więc chyba robię coś nie tak za każdym razem. Kontroler zapisujący wygląda tak:

  1. $editForm = $this->createForm(new UserType(), $user);
  2. $editForm->bind($request);
  3.  
  4. if ($editForm->isValid()) {
  5. $em->persist($user);
  6. $em->flush();
  7. //...


Będę wdzięczny za wskazanie co robię nie tak.