2011-08-25 74 views
55

我已經在那裏它會檢索所有相關的博客節上我的項目類別此symfony的代碼:如何使用symfony2原則查詢生成器來選擇不同的查詢?

$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(); 

但它會導致以下錯誤:

Fatal error: Call to undefined method Doctrine\ORM\QueryBuilder::distinct()

我如何告訴symfony中選擇不同?

+1

你應該傳遞一個布爾值不同()函數。 http://www.doctrine-project.org/api/orm/2.2/class-Doctrine.ORM.QueryBuilder.html#_distinct – Omn

回答

22

你可以寫

select DISTINCT f from t; 

select f from t group by f; 

的事情是,我只是目前自己進入學說,所以我不能給你一個真正的答案。但你可以如上所示,用group by模擬一個截然不同的東西,並將其轉換爲Doctrine。如果你想添加進一步的過濾,那麼在分組之後使用HAVING

+0

@mickburkejnr在添加ORDER子句之前。 :( – undefined

+0

@xyu我知道,這不是很理想嗎?爲什麼我們應該這樣做?爲什麼它不能正常工作? – mickburkejnr

+0

@mickburkejnr在SQL中排序之前發生分組 – undefined

42

如果使用 「選擇()」 語句,你可以這樣做:

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

$categories = $category->getResult(); 
131

這工作:

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

$categories = $category->getResult(); 
相關問題