IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

Many to Many avec table de jointure et createBuilder


Sujet :

Doctrine2 PHP

  1. #1
    Membre régulier Avatar de seb2020
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 133
    Points : 102
    Points
    102
    Par défaut Many to Many avec table de jointure et createBuilder
    Hello,

    Je rencontre actuellement un problème avec un many to many dans la création d'un formulaire avec Symfony.

    Voici mes deux entités :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Association extends EntityRepository {
     
        /**
         * Owning Side
         * 
         * @ORM\ManyToMany(targetEntity="AppBundle\Entity\User", cascade={"persist"}, inversedBy="associations")
         * @ORM\JoinTable(name="association_user",
         *      joinColumns={@ORM\JoinColumn(name="association_id", referencedColumnName="id")},
         *      inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}
         * )
         */
        private $users;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /**
     * @ORM\Entity
     */
    class User {
     
        /**
         * Inverse Side
         * 
         * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Association", mappedBy="users")
         */
        private $associations;
    Maintenant, j'aimerais afficher dans un select d'un formulaire que les associations pour un utilisateur spécifique. Dans un autre controller, je fais déjà ça et si je regarde la requête que l'ORM me fait cela donne ceci :

    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
    SELECT 
      t0.id AS id1, 
      t0.date AS date2, 
      t0.title AS title3, 
      t0.description AS description4, 
      t0.author AS author5, 
      t0.published AS published6, 
      t0.updated_at AS updated_at7, 
      t0.president AS president8, 
      t0.phone AS phone9, 
      t0.email AS email10, 
      t0.website AS website11, 
      t0.image_id AS image_id12 
    FROM 
      association t0 
      INNER JOIN association_user ON t0.id = association_user.association_id 
    WHERE 
      association_user.user_id = ?
    Pour le moment, j'en suis à quelque chose dans ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      $form = $this->get('form.factory')->createBuilder('form', $member)
                    ->add('association', 'entity', array(
                        'class' => 'AppBundle:Association',
                        'query_builder' => function(EntityRepository $er) {
                            return $er->createQueryBuilder('a,u')
                                    ->from('AppBundle:User', 'u')
                                    ->innerJoin('u.associations', 'ua')
                                    ->where('ua.id = :id')->setParameter('id', $this->getUser()->getId());
                        },
                        'property' => 'title',
                    ))
    Mais cela me donne une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Semantical Error] line 0, col 47 near 'u, AppBundle:User': Error: Class 'u' is not defined.
    Quelqu'un pourrait-il me donner un coup de main ?

    Merci

  2. #2
    Membre régulier Avatar de Fahelis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2014
    Messages : 77
    Points : 87
    Points
    87
    Par défaut
    Salut,
    Je pense que ton erreur se trouve ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    return $er->createQueryBuilder('a,u')
                                    ->from('AppBundle:User', 'u')
                                    ->innerJoin('u.associations', 'ua')
    Peut-être que tu peux mettre les 'a' et 'u' en arguement de createQueryBuilder (personnellement je n'ai jamais fais comme ça, j'ignore donc si ça marche, mais ça pourrait), mais je pense qu'il te faut les distinguer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    return $er->createQueryBuilder('a', 'u')
                                    ->from('AppBundle:User', 'u')
                                    ->innerJoin('u.associations', 'ua')
    Si ça ne fonctionne pas, essaye plutôt un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    return $er->createQueryBuilder('a')
                                    ->select('a', 'u')
                                    ->from('AppBundle:User', 'u')
                                    ->innerJoin('u.associations', 'ua')
    Pensez au bouton quand votre problème est réglé afin de ne pas faire perdre leur temps aux gens qui essayent gentiment d'aider les autres

Discussions similaires

  1. Réponses: 9
    Dernier message: 20/08/2012, 22h44
  2. [Doctrine] Relation many to many sur la même table
    Par hmartin.fr dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 01/09/2011, 09h41
  3. Réponses: 14
    Dernier message: 22/03/2011, 15h01
  4. [1.x] relation many to many sur une même table.
    Par thomas974 dans le forum Symfony
    Réponses: 4
    Dernier message: 03/09/2010, 18h55
  5. [AC-2000] Problème avec table de jointure
    Par Brunodm13 dans le forum Modélisation
    Réponses: 2
    Dernier message: 22/07/2009, 18h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo