80

私のプロジェクトのブログセクションに関連するすべてのカテゴリを取得するこの symfony コードがあります。

$category = $catrep->createQueryBuilder('cc')
    ->Where('cc.contenttype = :type')
    ->setParameter('type', 'blogarticle')
    ->getQuery();

$categories = $category->getResult();

これは機能しますが、クエリには重複が含まれます。

Test Content
Business
Test Content

DISTINCTクエリでコマンドを使用したい。私が見た唯一の例では、生の SQL を書く必要があります。Symfony2/Doctrine が提供する QueryBuilder 機能をすべて使用するように、すべてのコードを同じに保とうとしているので、これをできるだけ避けたいと考えています。

distinct()次のようにクエリに追加してみました:

$category = $catrep->createQueryBuilder('cc')
    ->Where('cc.contenttype = :type')
    ->setParameter('type', 'blogarticle')
    ->distinct('cc.categoryid')
    ->getQuery();

$categories = $category->getResult();

しかし、次のエラーが発生します。

致命的なエラー: 未定義のメソッド Doctrine\ORM\QueryBuilder::distinct() への呼び出し

symfony に個別を選択するように指示するにはどうすればよいですか?

4

4 に答える 4

55

「select()」ステートメントを使用すると、次のことができます。

$category = $catrep->createQueryBuilder('cc')
    ->select('DISTINCT cc.contenttype')
    ->Where('cc.contenttype = :type')
    ->setParameter('type', 'blogarticle')
    ->getQuery();

$categories = $category->getResult();
于 2012-01-25T10:04:41.607 に答える
30

あなたが書くことができます

select DISTINCT f from t;

なので

select f from t group by f;

つまり、私はちょうどDoctrineを始めたばかりなので、あなたに本当の答えを与えることはできません. ただし、上記のように、group byを使用して distinct をシミュレートし、それをDoctrineに変換できます。さらにフィルタリングを追加する場合はHAVING、group by の後に使用します。

于 2011-08-25T13:28:03.637 に答える