2010-11-11 24 views
1

J'ai un problème avec Doctrine ODM. Lorsque je crée une entité avec une simple relation de EmbedMany à un autre document (par exemple un nickpage avec de nombreux commentaires que les documents intégrés), et je tente de dégager la collection, la collection existe toujours avec tous les éléments:Doctrine ODM - Effacer/mettre à jour/supprimer EmbedDocument relations

/** @Document */ 
class Nickpage 
{ 
    ... 

    /** @EmbedMany(targetDocument="Comment") */ 
    protected $comments = array(); 

    ... 

    public function clearComments() 
    { 
     $this->comments = array(); 
     // or: 
     // $this->comments = new \Doctrine\Common\Collections\ArrayCollection(); 
     return $this; 
    } 
} 

Quand je il suffit de charger une page de pseudo avec les commentaires associés, et j'appelle

$nickpage->clearComments(); 
$dm->persist($nickpage); 
$dm->flush(); 

les commentaires existent toujours. Le même phénomène se produit lorsque je supprime certains éléments dans les commentaires $ ArrayCollection et je vide ...

Suis-je dans le mauvais sens de gérer de telles relations (ie utiliser ReferenceMany) ou est-ce la mauvaise façon de travailler avec les références? ?

Greetz Allemagne, Andi

Répondre

2

Vous ne devez pas appeler persistent parce que votre page est déjà gérée par Doctrine. Vous n'avez qu'à appeler Flush pour pousser la mise à jour dans la base de données.

Et vous n'avez pas besoin d'ajouter une méthode clearComments. Vous pouvez utiliser la méthode clear de ArrayCollection:

$nickpage->comments->clear();