Symfony2 & Doctrine - Получить количество строк, возвращаемых из источника данных
У меня есть следующий код в моем классе хранилищ Symfony2...
$query = $this->createQueryBuilder('foo')
->where('foo.bar = :id')
->setParameter('id', $myID)
->getQuery();
Как получить количество строк, найденных в базе данных?
Заранее спасибо
Ответы
Ответ 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