2017-06-28 1 views
0

J'ai l'image et la catégorie entité. Many-To-Many avec table de jointure (One-dircetional). J'utilise l'élément de formulaire ObjectSelect de Doctirne avec plusieurs options. Lorsque je sélectionne certaines catégories, Doctrine insère les enregistrements avec succès. Mais quand je veux les détruire, ce n'est pas le cas. Suis-je implémenté correctement la méthode removeCategories? Peut-être que je manque un petit quelque chose, mais ne peux pas le comprendreDoctrine ObjectSelect ne supprime pas la relation lors de la désélection

Class Image 
    ... 
    /** 
    * @ORM\ManyToMany(targetEntity="Categories") 
    * @ORM\JoinTable(name="images_categories", 
    *  joinColumns={@ORM\JoinColumn(name="image_id", referencedColumnName="id")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id")} 
    *  ) 
    */ 
    protected $classBobjects; 
    ... 
    public function getCategories() 
    { 
     return $this->categories; 
    } 

    public function addCategories($categories) 
    { 
     foreach ($categories as $category) { 
      $this->categories->add($category); 
     } 
    } 

    public function removeCategories($categories) 
    { 
     foreach ($categories as $category) { 
      $this->categories->remove($category); 
     } 
    } 

En forme fieldset Je élément suivant

$this->add([ 
      'name' => 'categories', 
      'type' => ObjectSelect::class, 
      'attributes' => [ 
       'multiple' => true, 
       'class' => 'chosen-select', 
      ], 
      'options' => array(
       'object_manager' => $this->getServiceLocator()->get(EntityManager::class), 
       'target_class' => Category::class, 
       'property' => 'title', 
       'is_method' => true, 
       'find_method' => array(
        'name' => 'findAll', 
       ), 
      ), 
     ]); 

Répondre

0

Je l'ai trouvé. L'erreur était dans l'implémentation de removeCategories()

$this->categories->remove($category); 

should be 

$this->categories->removeElement($category);