如何使用symfony2原则查询生成器来select不同的查询?

我有这个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()

我如何告诉symfonyselect不同的?

你可以写

 select DISTINCT f from t; 

 select f from t group by f; 

事情是,我现在只是在进入主义,所以我不能给你一个真正的答案。 但你可以如上所示,用group来模拟一个独特的元素,并将其转化为Doctrine 。 如果你想添加进一步的过滤,那么在分组之后使用HAVING

这工作:

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

如果你使用“select()”语句,你可以这样做:

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