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

Symfony PHP Discussion :

order by d'un champ d'une entité liée [3.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club Avatar de Elianora la blanche
    Femme Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 102
    Points : 59
    Points
    59
    Par défaut order by d'un champ d'une entité liée
    bonjour à tous !

    j'ai 2 entités : Movie et userMovie telles que Movie a plusieurs UserMovie et UserMovie appartient à un seul Movie

    je récupère une liste de UserMovie que j'aimerais trier par un attribut de Movie

    si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $films = $this->getDoctrine()
                ->getManager('cine')
                ->getRepository('EliaCineBundle:UserMovie')
                ->findBy(array('user' => $user_id));
    j'ai bien ma liste, avec tous les attributs dont j'ai besoin dans mon template mais pas dans le bon ordre bien que la relation soit définie telle que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /**
         * @ORM\ManyToOne(targetEntity="Movie", inversedBy="usermovies")
         * @ORM\JoinColumn(name="movie_id", referencedColumnName="id")
         * @ORM\OrderBy({"title" = "ASC"})
         */
        private $movie;
    j'ai donc créé un repository et une méthode telle que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $qb = $this->createQueryBuilder('um');
     
            $qb->select('um')
            	// ->innerJoin('um.user', 'u')
            	->innerJoin('um.movie', 'm')
            	->addSelect('m')
            	// ->add('where', $qb->expr()->eq('u.id', $user_id))
            	->orderBy('m.title', 'ASC')
    	        ->getQuery()
    	        ->getResult();
     
            return $qb;
    mais, même si la requête SQL est correcte, ça ne me renvoie rien dans mon template

    à coups de dump, j'ai constaté que findBy renvoie un array alors que querybuilder renvoie une collection d'objets

    j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ->getResult(Query::HYDRATE_ARRAY);
    sans effet
    et même (en mode cra cra) mais du coup, je n'ai plus accès aux attributs de Movie dans le template...

    comment faire pour que query_builder renvoie un array directement utilisable dans le template ?

    merci d'avance !

  2. #2
    Membre du Club Avatar de Elianora la blanche
    Femme Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 102
    Points : 59
    Points
    59
    Par défaut
    j'ai trouvé (et c'est très très bête !) :
    il ne faut pas retourner le query builder directement, mais seulement ses résultats

    ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $qb = $this->createQueryBuilder('um');
     
            $qb->select('um')
            	->innerJoin('um.user', 'u')
            	->innerJoin('um.movie', 'm')
            	->where('u.id = :userId')
            	->setParameter('userId', $user_id)
            	->orderBy('m.title', 'ASC');
     
    	    return $qb->getQuery()->getResult();

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2.x] Sauvegarder un seul champ d'une entité
    Par mykee dans le forum Symfony
    Réponses: 5
    Dernier message: 03/12/2012, 18h08
  2. Mapping : @ManyToOne d'un champs d'une entité
    Par Invité dans le forum Hibernate
    Réponses: 0
    Dernier message: 21/08/2009, 12h32
  3. Réponses: 11
    Dernier message: 17/03/2006, 13h20
  4. Comment modifier un champ dans une table liée ?
    Par HookerSeven dans le forum Access
    Réponses: 11
    Dernier message: 05/02/2006, 23h50
  5. [select dans case] reconnaitre un champ d une table liée
    Par the_edge dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 22/10/2004, 16h47

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