Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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


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

Ответ 2

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

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

$total = $query->getSingleScalarResult();

Ответ 3

Вы выполняете запрос, затем получаете результаты. Когда у вас есть результаты, вы получите номер записи, выполнив 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

Ответ 4

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

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

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

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

Ответ 5

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

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

Проще всего:

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

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

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