У меня есть следующий код в моем классе хранилищ 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