1
$queryBuilder = $eleveRepository->createQueryBuilder('n');
$queryBuilder->select('COUNT(eleve.nom)')
            ->from(Eleve::class, 'eleve') ;
$totalEleves = $queryBuilder->getQuery()->getSingleScalarResult();

return $this->render('security/eleve.html.twig' , [
               'formulaire'=> $form->createView(),
               'eleves' => $eleveRepository->findAll() ,
               'totalEleves' => $totalEleves

        ]) ;

I only have 7 records, but doctrine is returning me 49

1 Answers1

0

To solve this:

1) Remove

->from(Eleve::class, 'eleve')

this is not needed since you create the query builder from the Eleve repository $eleveRepository->createQueryBuilder('n')

2) Change the select to:

$queryBuilder->select('COUNT(n.nom)')

Why this happens:

Calling from() creates a Cartesian product between all Eleve entities:

So you get a result of 7 Eleve x 7 Eleve combinations. You can see the sql query by doing:

$sql = $queryBuilder->getQuery()->getSQL();

and it will be similar to:

SELECT COUNT(a0_.nom) AS sclr_0 FROM eleve a1_, eleve a0_

This is equivalent to a join of eleve table with itself.

Jannes Botis
  • 11,154
  • 3
  • 21
  • 39