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)
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.