web-dev-qa-db-fra.com

Symfony2 & Doctrine - Récupère le nombre de lignes renvoyées par la source de données

J'ai le code suivant dans ma classe de référentiel Symfony2 ...

$query = $this->createQueryBuilder('foo')
        ->where('foo.bar = :id')
        ->setParameter('id', $myID)
        ->getQuery();

Comment obtenir le nombre de lignes trouvées par la base de données?

Merci d'avance

31
Matt

Vous devez exécuter DQL pour faire quelque chose que vous voulez.

$query = $this->createQueryBuilder()
              ->from('foo', 'f')
              ->where('foo.bar = :id')
              ->setParameter('id', $myID)
              ->getQuery();


$total = $query->select('COUNT(f)')
               ->getQuery()
               ->getSingleScalarResult();
42
Reuven

Je pense que vous pouvez faire quelque chose comme ça:

$query = $this->createQueryBuilder()
    ->select('COUNT(f.id)') 
    ->from('foo', 'f')
    ->where('foo.bar = :id')
    ->setParameter('id', $myID)
    ->getQuery();

$total = $query->getSingleScalarResult();
32
pixyz

Vous exécutez la requête puis obtenez les résultats. Lorsque vous avez les résultats, vous obtenez le nombre d'enregistrements en faisant un count sur les résultats:

$results = $query->getResult();
$resultCount = count($results);

Si vous êtes intéressé par la pagination, comme obtenir 25 enregistrements sur le total. Ensuite, vous avez deux choix.

  • Vous effectuez la requête deux fois, une fois pour obtenir les résultats totaux, une autre fois pour récupérer seulement 25 résultats en utilisant la méthode setFirstResult et setMaxResults. Cette méthode setFirstResult vous permet de définir le décalage et le deuxième, setMaxResults, nombre d'enregistrements. Le code suivant vous donnera des résultats allant de 25 à 50, c'est la deuxième page si vous utilisez 25 enregistrements par page.

    $query->setFirstResult(25);
    $query->setMaxResults(25);

  • Vous pouvez vérifier les extensions de doctrine pour Doctrine2 qui prennent en charge le paginateur. Ces extensions ont été réalisées par l'un des développeurs de Doctrine2. Vous pouvez les consulter ici .

J'espère que cette aide.

Cordialement,
Mat

19
Matt

Je pense que c'est aussi concis que possible:

$qb = $repo->createQueryBuilder('entity');
$qb->select('COUNT(entity)');

$count = $qb->getQuery()->getSingleScalarResult();

$repo est de type Doctrine\ORM\EntityRepository

7
Casey