web-dev-qa-db-ja.com

Symfony2&Doctrine-データソースから返された行数を取得

Symfony2リポジトリクラスに次のコードがあります...

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

データベースで見つかった行数を取得するにはどうすればよいですか?

前もって感謝します

31
Matt

必要なことを行うには、DQLを実行する必要があります。

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


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

そのようなことができると思います:

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

$total = $query->getSingleScalarResult();
32
pixyz

クエリを実行して、結果を取得します。結果が得られたら、結果に対してcountを実行してレコード数を取得します。

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

合計のうち25レコードを取得するなど、ページングに関心がある場合。次に、2つの選択肢があります。

  • クエリを2回実行し、1回は合計結果を取得し、もう1回はメソッドsetFirstResultおよびsetMaxResultsを使用して25件の結果のみを取得します。このメソッドsetFirstResultを使用すると、オフセットと2番目のレコードsetMaxResultsの数を設定できます。次のコードは、25〜50の範囲の結果を提供します。ページごとに25レコードを使用する場合、2番目のページになります。

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

  • ページネーターをサポートしているDoctrine2のDoctrine-extensionsを確認できます。これらの拡張機能は、Doctrine2の開発者の1人によって作成されました。これらを確認できます here

この助けを願っています。

よろしく、
マット

19
Matt

私はこれが得るほど簡潔だと思います:

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

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

どこ$repoはタイプDoctrine\ORM\EntityRepository

7
Casey