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 :

Pagerfanta, trié par count [2.x]


Sujet :

Symfony PHP

  1. #1
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut Pagerfanta, trié par count
    Hello.

    Sur mon site web, j'essaye de mettre en place de la pagination.
    Cela fonctionne plutot bien en général, mais il y a un cas ou j'ai quelques problèmes.

    J'ai une entité Idée et une autre Commentaire. Comme on peut s'en douter, pour une idée je peux avoir plusieurs comentaires.

    Je veux donc trier mes idées par nombre de comentaires pour mettre en évidence celles qui font le buzz.

    Lorsque j'affiche toutes les idées, pas de problème. En revanche, lorsque j'essaye de faire cela avec un wrapper PagerFanta, il me lance une exception doctrine.

    Est ce que vous sauriez ce que ca pourrait être ?

    Merci,
    Pierre

    PS : le message d'erreur.
    Notice: Trying to get property of non-object in /vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php line 174

    Des extraits de code :

    Ma requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $qb = $this->createQueryBuilder('i');
            $qb->select('i','COUNT(c.id) as number')
    ca ca marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $qb->addOrderBy('i.id', 'DESC');
    Ca ca ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $qb->addOrderBy('nombre', 'DESC');
    Le bug apparait a cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pagerfanta->getCurrentPageResults();

  2. #2
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    essais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $qb->addOrderBy('i.nombre', 'DESC');
     
    ou 
     
    $qb->addOrderBy('number', 'DESC');

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2013
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 34
    Points : 33
    Points
    33
    Par défaut
    Dans ton entityRepository moi j'utilise ceci par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $qb = $this->createQueryBuilder('a');
     
    		$qb ->where('a.user = '."$user")
    			->orderBy("a.ordre", 'asc');
     
    		return $qb->getQuery()
    				  ->getResult();

  4. #4
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut
    Citation Envoyé par dukoid Voir le message
    essais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $qb->addOrderBy('i.nombre', 'DESC');
     
    ou 
     
    $qb->addOrderBy('number', 'DESC');
    Bonjour,

    Je vais tester le number, mais je crois que c'est un problème de traduction de mon code non uniforme. J'avais changer nombre par number pour crééer une question sur le bundle pagerfanta... je doute que le problème soit là.

    Je regarderai pour i.nombre pour voir si ca résoud quelque chose.




    Pour ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $qb ->where('a.user = '."$user")
    			->orderBy("a.ordre", 'asc');
    Je ne comprends pas d'ou vient le a.ordre ?
    Est ce une colonne dans la BDD ?
    Je ne peux pas stocker le nombre de commentaire dans la base, ca serait une violation directe des formes normales...


    Ce qui m'étonne le plus dans ce problème, c'est que la requete fonctionne sans la pagination.


    merci à vous deux.

    Pierre

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Ce qui m'étonne le plus dans ce problème, c'est que la requete fonctionne sans la pagination.
    cela ne tendrait pas à dire que le paginateur tente d'effectuer une requete sql du type
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT COUNT(*) 
    FROM Idee i 
    WHERE user_id=:userId 
    ORDER BY nombre
    (requete qui plante logiquement, car nombre n'existe pas vue que le paginator remplace ton Select par un select Count(*))
    suivi de
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT i, 
    (SELECT COUNT(comments) FROM Comments c WHERE c.idee_id=id)  as nombre 
    FROM Idee i 
    WHERE user_id=:userId 
    ORDER BY nombre
    LIMIT 0,25

  6. #6
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut
    peut être... je regarderais le détail ce soir.

    Mais cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT COUNT(*) 
    FROM Idee i 
    WHERE user_id=:userId 
    ORDER BY nombre
    est pour moi étrange.
    le order by ne va en rien changer le nombre d’occurrence, mais consomme des ressources, donc il devrait être retiré. J'ose espérer que doctrine ne fait pas ce genre d'erreur...

    Je vous tient au courant dés que je vois mon code tourner en mode debug.

    Merci,
    Pierre

  7. #7
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut
    Bonjour.

    C'ets bien un bug de doctrine.

    Quand je replace mon fichier (doctrine 2.3) par celui ci : https://github.com/doctrine/doctrine...tputWalker.php

    le problème est résolu.

    Mais c'est une version beta / dev, donc pas cool pour la prod...

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

Discussions similaires

  1. Requête récalcitrante avec un tri par COUNT sans GROUP BY
    Par Ancalagon77 dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/10/2006, 14h27
  2. [ XML ][ XSL ] tri par date
    Par zozolh2 dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/08/2004, 10h19
  3. [LG]Tri par insertion dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 4
    Dernier message: 18/12/2003, 22h34
  4. Tri par ordre alphabétique
    Par orus8 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 17/04/2003, 19h27
  5. Tri par fusion d'un tableau
    Par Mailgifson dans le forum C
    Réponses: 5
    Dernier message: 12/12/2002, 14h53

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