Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Doctrine2 PHP Discussion :

ManyToMany avec attributs et join dans query builder


Sujet :

Doctrine2 PHP

  1. #1
    Futur Membre du Club
    ManyToMany avec attributs et join dans query builder
    Bonjour à tous,

    je suis nouveau sur symfony2, et j'ai du mal à comprendre certains choses malgré mes lectures sur le net,

    J'ai une relation ManyToMany que j'ai modélisée en ajoutant une entité intermédiaire car j'ai un attribut dessus,

    Disons que j'ai une entité User, une entité Group, et une entité de relation UsersGroups.

    Mon problème est que j'aimerais, dans le repository de User, pouvoir récupérer pour un User donné, un tableau avec les groupes auxquels il appartient (l'attribut supplémentaire de la relation étant un ordre total entre les groupes d'un utilisateur, il sera modélisé par la position dans le tableau),

    Et là j'avoue que c'est le flou artistique, je me mélange entre requetage directement sur les objets ou sur les champs de la BD.

    Dans ma requete doctrine, j'ai essayé de partir de l'entité Group (puisque je veux des objets Group en sortie), et de faire un join vers UsersGroups puis sur User (avec une contrainte sur l'id).

    Mais je ne sais pas si je dois faire des join sur l'attribut usersgroups de Group ou sur des champs de la BD ...

    Bref je suis paumé,

    Quelqu'un pourrait m'aiguiller ?

    Merci d'avance !

    Ptit Codeur

  2. #2
    Membre habitué
    Salut,

    Il faut effectivement faire des jointures pour relier dans une et même requête tes entités et récupérer les infos de ton entité User UserGroups et Group.

    Maintenant pour ce qui est de la construction de ta requête, il faut que tu utilises les noms de tes attributs de class, en respectant la casse et pas le nom des champts dans ta base.

    Tu indiques à doctrine quels attributs tu veux mettre en relation et lui se dé....brouille, pour aller chercher les données en base.
    Douter de tout, toujours, et surtout de soi-même...

  3. #3
    Membre habitué
    Si jamais j'ai du résoudre un problème dans le genre aujourd'hui si ça peut encore être utile..

    voici la solution que j'ai appliqué pour mon projet


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    $em = $this->getDoctrine()->getManager();
    $qb = $em->createQueryBuilder()->addSelect('u')->from('ClientUserBundle:User', 'u');
    $qb->leftJoin('u.groups','g');
     
    if (count($criteria) == 0)
    {
        foreach ($_POST as $attr => $value)
        {
            if ($value!='')
            {
                if (!is_array($value))
                    $value = array($value);
     
                foreach ($value as $key => $value)
                {
                    $attribute = str_replace('__', '.', $attr);
                    $qb->andwhere($attribute.' like :'.$value)->setParameter($value,'%'.$value.'%');
                }
            }
        }
    }
    $users = $qb->getQuery()->getResult();
    /**
    * Author: Tehem
    * Version: 2.0
    */
    Extension Twig pour Symfony 2.1 (Check Defined Constant)
    https://github.com/tehem/TwigConstantExtension