Właściwy sposób aktualizacji dwukierunkowej relacji Wiele do Wielu symfony2-doktryna

Zrobiłem kilka badań i po przeczytaniuto ito (i wszystkie związane z tym pytania) Nadal nie mogę się zorientować, jaki jest właściwy sposób aktualizacji relacji wielu do wielu w Symonfy 2 Doctrine. Uważa, że ​​powinien istnieć bardzo prosty sposób na zrobienie tego, czego wciąż nie znalazłem.

Mam te 2 podmioty:

class student_main
{
/**
* @ORM\ManyToMany(targetEntity="support_log", inversedBy="student_main")
* @ORM\JoinTable(name="support_log_student")
**/
private $support_log;

i

class support_log
{
/**
* @ORM\ManyToMany(targetEntity="student_main", mappedBy="support_log")
**/
private $student;

Chcę zacząć odsupport_log. W kontrolerze w akcji aktualizacji mam coś takiego:

if ($editForm->isValid()) {        
  //add the relationship the user added
  foreach($students as $student){
    if(!$em->getRepository('mybundle:student_main')->hasSupportLog($entity,$student)){
        $entity->addstudent_main($student);//*
        }
    }
    $em->persist($entity);
    $em->flush();
    return $this->redirect($this->generateUrl('support_log_edit', array('id' => $id)));
}

Oczywiście, jak mówi doktryna Dokumentacja, zmieniłem tę funkcję (addstudent_main) odpowiednio:

public function addstudent_main(student_main $student)
{
    $student->addsupport_log($this); // the important addition
    $this->student[] = $student;
}

To działa dobrze, moje pytanie dotyczy raczej usunięcia relacji. W formularzu jest wybór wielokrotny, a użytkownik może wybrać uczniów, którzy są już powiązani, a niektórzy nie. Uważa, że ​​powinien to być automatyczny sposób, ale zamiast tego musiałem zrobić dużo kodu.

W kontrolerze, nieco powyżej kodu, który napisałem wcześniej:

//delete all old relationship
foreach($idsldstudents as $idst){ //I take Id's because the doctrine collection is updating always..
            $stu=$em->getRepository('MyBundle:student_main')->find($idst);
            $stu->deletesupport_log($entity);//I had to create that method (in the entity, I do "$this->support_log->removeElement($support_log)")
            $em->persist($stu);
            $em->flush();
        }

Usuwam wszystkie relacje danego podmiotu (oczywiście biorąc pod uwagę, że jest to relacja dwukierunkowa, więc musi zostać usunięta najpierw po drugiej stronie), a następnie te, które wybrany użytkownik zostanie dodany.

Są na to inne sposoby, ale nie znalazłem żadnego prostego. We wszystkich mam te same problemy:

Muszę cały czas sprawdzać, czy związek istnieje, czy nieMuszę uzyskać stare relacje (co jest trudne) i porównać je z nowymi, które wskazał użytkownik, i odpowiednio je usunąć lub utworzyć

Czy istnieje sposób, aby automatycznie rozwiązać te 2 problemy? (Mam silne przeczucie, że musi być - może z lepszą deklaracją związku? - dlatego pytam).

Z góry dziękuję

Edytuj: Mój formularz nie ma nic specjalnego, myślę, że nawet nie dotknąłem wygenerowanego kodu. Wyświetla multiselect, którego chcę, domyślny Symfony2, w którym musisz użyćctrl klawisz, aby wybrać więcej niż jeden. Oto kod:

public function buildForm(FormBuilder $builder, array $options)
{
    $builder           
        ->add('student')
        ... 
        ;
}

Klucz polega tutaj?

questionAnswers(4)

yourAnswerToTheQuestion