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 :

[Query Builder] Compter le nombre d'entrées d'une relation


Sujet :

Doctrine2 PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Par défaut [Query Builder] Compter le nombre d'entrées d'une relation
    Bonjour à tous,

    Une petite question de syntaxe à propos du QueryBuilder.
    J'ai une entité Classe qui a une relation students pour avoir les élèves appartenant à cette classe.

    J'aimerais avoir le nombre d'élèves par classe à la requête de ma liste, seulement si j'ajoutes un ->count j'ai une erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //Repository
    $query = $this->createQueryBuilder('c')
    ->orderBy('c.title')
    //->count('c.students')
    ->getQuery();
     
    return $query->getResult();
    Je ne vois pas trop comment mettre mon count en DQL.

    Merci pour votre aide.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Par défaut
    Salut,

    Voila ce que j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        public function countByAccount(Account $account)
        {
            $qb = $this->createQueryBuilder('e');
     
            $qb ->select($qb->expr()->count('e'))
                ->where('e.account = :account')
                    ->setParameter('account', $account);
     
            return (int) $qb->getQuery()->getSingleScalarResult();
        }

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Par défaut
    A mon avis j'ai du mal me faire comprendre, en fait je voulais afficher le nombre d'étudiants par classe sur la page qui liste toutes les classes.

    J'y arrivais en ajoutant une fonction dans mon entité classe qui retournait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return $this->getStudents()->count();
    Mais ca me faisait une requete en plus par classe.

    Pour palier au problème, j'ai du rajouter un leftJoin dans le repository et faire le count dans le template :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //Repository
     
    $query = $this->createQueryBuilder('c')
    ->addSelect('s')
    ->leftJoin('c.students', 's')
    ->orderBy('c.title')
    ->getQuery();
     
    return $query->getResult();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //Template
    {{ entity.students.count }}
    Merci encore

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Par défaut
    Tu te sers de la liste des étudiants ou tu veux juste leur nombre ?

    Si tu veux juste leur nombre, modifie ta requete en utilisant mon count. Parce que là tu sélectionnes vraiment tout, c'est pas optimisé du tout !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Par défaut
    Je veux juste le nombre d'étudiants par classe sur la page qui liste toutes les classes.

    Si je regarde ta requete, c'est pour une seule classe ?

    Et je ne vois pas trop comment ajouter cela à ma requete initiale qui liste les classes

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Par défaut
    Essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $qb = $this->createQueryBuilder('c');
    $query->addSelect($qb->expr()->count('s'))
      ->leftJoin('c.students', 's')
      ->groupBy('c.id')
      ->orderBy('c.title')
      ->getQuery();
    J'ai pas testé mais ca m'intéresse de savoir comment tu t'en sors avec ca, car du coup tu récupères pas un objet Classe...

Discussions similaires

  1. Compter le nombre d'entrées dans une table
    Par gégé140488 dans le forum Hibernate
    Réponses: 5
    Dernier message: 24/09/2010, 16h22
  2. [MySQL] Compter le nombre d'entrées dans une colonne
    Par gastoncs dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/07/2009, 22h09
  3. Compter le nombre d'entrées dans une BDD avec condition
    Par iFlo1 dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 29/03/2009, 21h33
  4. Compter le nombre d'entrée avec condition
    Par Seta-san dans le forum Langage
    Réponses: 5
    Dernier message: 17/02/2009, 12h20
  5. Compter un nombre d'entré
    Par Nadd dans le forum Langage
    Réponses: 8
    Dernier message: 11/04/2006, 19h07

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