Maneira correta de atualizar o relacionamento bidirecional Many to Many symfony2-doctrine

Eu fiz algumas pesquisas, e depois de leristo eisto (e todas as questões relacionadas) Eu ainda não consigo entender qual é a maneira correta de atualizar muitos para muitos relacionamentos na Doutrina Symonfy 2. Parece que deveria haver uma maneira muito simples de fazer isso que eu ainda não encontrei.

Eu tenho esse 2 entidades:

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

e

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

Eu quero começar desupport_log. No controlador, na ação de atualização, eu tenho algo assim:

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

É claro que, como diz a Documentação da doutrina, eu mudei essa função (addstudent_main) de acordo:

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

Isso funciona bem, minha pergunta é mais sobre como excluir o relacionamento. No formulário, há um multiseleto e o usuário pode selecionar alguns alunos que já estão relacionados e outros que não. Parece que deveria haver uma maneira automática de fazer isso, mas em vez disso eu tive que fazer muito código.

No controlador, apenas ligeiramente acima do código que eu escrevi antes, eu coloquei isso:

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

Eu apago todos os relacionamentos da entidade em questão (claro, levando em conta que é um relacionamento bidirecional, por isso tem que ser excluído primeiro no outro lado), e então os que o usuário selecionou serão adicionados.

Há outras maneiras de fazer isso, mas não encontrei nenhuma simples. Em todos eles tenho os mesmos problemas:

Eu preciso verificar o tempo todo se a relação existe ou nãoEu preciso obter os relacionamentos antigos (o que é difícil) e comparar com os novos que o usuário indicou, e excluir ou criar de acordo

Existe uma maneira de fazer isso que cuida desses dois problemas automaticamente? (Eu tenho um forte sentimento de que deve haver - talvez com uma melhor declaração do relacionamento? - é por isso que estou perguntando).

desde já, obrigado

Edit: Meu formulário não tem nada de especial, acho que nem toquei no código gerado. Ele exibe o multiselect que eu quero, o padrão do Symfony2, onde você tem que usarctrl para selecionar mais de um. Aqui está o código:

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

A chave depende aqui?

questionAnswers(4)

yourAnswerToTheQuestion