Symfony2 & Doctrine – Получить количество строк, возвращаемых из источника данных

У меня есть следующий код в моем классе хранилищ Symfony2 …

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

Как получить количество строк, найденных в базе данных?

заранее спасибо

Вам нужно выполнить DQL, чтобы сделать что-то нужное.

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

Я думаю, вы можете сделать что-то вроде этого:

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

Вы выполняете запрос, затем получаете результаты. Когда у вас есть результаты, вы получите количество записей, сделав count результатов:

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

Если вас беспокоит пейджинг, например, получение 25 записей из общей суммы. Затем у вас есть два варианта.

  • Вы выполняете запрос дважды, один раз, чтобы получить итоговые результаты, в другой раз, чтобы получить только 25 результатов, используя метод setFirstResult и setMaxResults . Этот метод setFirstResult позволяет вам установить смещение и второе, setMaxResults , количество записей. Следующий код даст вам результаты от 25 до 50, это вторая страница, если вы используете 25 записей по страницам.

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

  • Вы можете проверить доктрины-расширения для Doctrine2, которые поддерживают paginator. Эти расширения были сделаны одним из разработчиков Doctrine2. Вы можете просмотреть их здесь .

Надеюсь, эта помощь.

С Уважением,
Matt

Я думаю, что это так же лаконично, как и получается:

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

Где $repo имеет тип Doctrine\ORM\EntityRepository

Почему бы не использовать функцию php count() ?

Поскольку доктрина возвращает массив, содержащий все ваши результаты, вы можете легко получить количество строк, возвращаемых вашим запросом.

Так просто :

 [...] // Your doctrine query $foo = $query->getResult(); $nbRow = count($foo); 

Где $query – это переменная, которую вы используете для создания запроса доктрины.

Ссылка на документацию php: http://php.net/manual/en/function.count.php