Ma Relation ManyToMany n’est pas persisté.

La persistance de la relation ManyToMany avec doctrine n’est pas bidirectionnelle.

Il y a un côté maitre et un côté esclave. Seule la sauvegarde du côté maitre entrainera la sauvegarde du côté esclave.

Exemple :

<?php

class Article
{

    /**
    * @ManyToMany(targetEntity="Tag", inversedBy="articles")
    * @JoinTable(name="article_tag")
    **/
    private $tags;

}

class Tag
{

    /**
    * @ManyToMany(targetEntity="Article", mappedBy="tags")
    **/
    private $articles;

}

Dans cet exemple, c’est la classe Article qui est maitresse.

Lorsque l’on persistera la classe Article, les liaisons avec la classe Tag seront persistées elle aussi. Ce n’est pas le cas quand on persiste la classe Tag (il faudra développer du code spécifique)

6 réflexions au sujet de « Ma Relation ManyToMany n’est pas persisté. »

  1. nice entry,
    d’accord avec ce que vous dites mais en modifiant un peu le code c’est possible en créant physiquement la classe article_tag et on modifiant le code coté article et tag de façon à gérer cet contrainte avant la persistance ex:

    class article :
    public function addTag($T) {
    $this->Tag[] = $T;
    }
    /**
    * @ORM\OneToMany(targetEntity= »article_tag », mappedBy= »idTag »,cascade={« persist »})
    */
    private $Tag;

    et presque le même code coté Tag,
    voila une solution testé en production dans un projet à fort traffic.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>