Symfony2 & Doctrine - получает количество строк, возвращаемых из источника данных - PullRequest
31 голосов
/ 22 ноября 2011

В моем классе репозитория Symfony2 есть следующий код ...

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

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

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

Ответы [ 4 ]

42 голосов
/ 22 ноября 2011

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

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


$total = $query->select('COUNT(f)')
               ->getQuery()
               ->getSingleScalarResult();
32 голосов
/ 16 декабря 2011

Я думаю, вы можете сделать что-то подобное:

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

$total = $query->getSingleScalarResult();
19 голосов
/ 22 ноября 2011

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

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

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

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

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

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

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

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

7 голосов
/ 03 октября 2012

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

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

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

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

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