如何使用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不同的?

3 Solutions collect form web for “如何使用symfony2原则查询生成器来select不同的查询?”

你可以写

 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(); 
  • 在Twigpath中添加多个参数
  • 如何在Symfony2中设置表单字段的默认值?
  • 我如何在Doctrine 2 DQL中使用now()?
  • EntityManagerclosures
  • Symfony2禁用caching?
  • Nelmio Api Doc中的组排除不起作用更新composer php之后
  • 使用symfony2和doctrine从现有数据库生成单个实体
  • 树枝,加上第一课和最后一课
  • 如何在Twig模板中呈现DateTime对象
  • 如何在Sonata Admin窗体中使用Ajax?
  • 在树枝模板中重写小部件时直接访问表单字段的值