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)

PagerFanta et l’erreur « array_merge() »

PagerFanta est un Bundle pour Symfony 2 qui permet de paginer l’affichage de collections. Il est assez simple d’utilisation, mais il est courant de rencontrer l’erreur suivante :

"Warning: array_merge() [<a href='function.array-merge'>function.array-merge</a>]: Argument #2 is not an array in /path/to/my/project/vendor/bundles/WhiteOctober/PagerfantaBundle/Twig/PagerfantaExtension.php line 73") in MaBoite\/MonBundle\/Resources\/views\/MonControlleur\/index.html.twig at line XXX.

Ce message apparait lorsque l’on a installé une mauvaise version de PagerFanta. Les sources disponibles par défaut sur GitHub suivent la branche master de Symfony, qui avance actuellement sur la version 2.1 du Framework.

Il est très probable que la version Symfony sur laquelle vous travaillez soit une 2.0.XX (dernière version stable au moment où j’écris ces lignes). Il faut donc utiliser la branche symfony2.0 de PagerFanta. Si vous installez les sources directement par copier/coller (déconseillé), remplacez simplement les sources master par celles de la branche symfony2.0. Si vous installez le bundle via le fichier deps (recommandé), il vous faut utiliser les lignes suivantes.

[PagerFanta]
 git=http://github.com/whiteoctober/Pagerfanta.git
 target=pagerfanta
[PagerFantaBundle]
 git=http://github.com/whiteoctober/WhiteOctoberPagerfantaBundle.git
 target=bundles/WhiteOctober/PagerfantaBundle
 version=origin/symfony2.0

Lancez ensuite simplement la commande pour installer les vendors.

bin/vendors install

Attention ! Si vous aviez déjà installé la version master de PagerFanta via le fichier deps, celle ci est probablement verrouillée. Il vous faudra alors supprimer la ligne PagerFantaBundle dans le fichier deps.lock avant de lancer l’installation.