如何使用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(); 
  • 将数据传递给Symfony 2.8 / 3.0中的buildForm()
  • 我怎样才能从控制器运行symfony 2运行命令
  • Symfony2:在服务中注入当前用户
  • Running Composer返回:“无法打开input文件:composer.phar”
  • 从root用户运行凉亭,有可能吗? 怎么样?
  • 是否有一种内置的方式来获取Doctrine 2实体中所有已更改/更新的字段
  • cascade = {“remove”} VS orphanRemoval = true VS ondelete =“CASCADE
  • 如何将日志从一个服务写入单独的文件?
  • 在PhpStorm中使用Symfony项目时如何configuration“目录”
  • Symfony2,如何使表单标签类/ attr不同于其input?
  • 如何安装与Composer的jQuery?