如何使用symfony2原则查询生成器来选择不同的查询?
我已经在那里它会检索所有相关的博客节上我的项目类别此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中选择不同?
你可以写
select DISTINCT f from t;
为
select f from t group by f;
的事情是,我只是目前自己进入学说,所以我不能给你一个真正的答案。但你可以如上所示,用group by模拟一个截然不同的东西,并将其转换为Doctrine。如果你想添加进一步的过滤,那么在分组之后使用HAVING
。
@mickburkejnr在添加ORDER子句之前。 :( – undefined
@xyu我知道,这不是很理想吗?为什么我们应该这样做?为什么它不能正常工作? – mickburkejnr
@mickburkejnr在SQL中排序之前发生分组 – undefined
如果使用 “选择()” 语句,你可以这样做:
$category = $catrep->createQueryBuilder('cc')
->select('DISTINCT cc.contenttype')
->Where('cc.contenttype = :type')
->setParameter('type', 'blogarticle')
->getQuery();
$categories = $category->getResult();
这工作:
$category = $catrep->createQueryBuilder('cc')
->select('cc.categoryid')
->where('cc.contenttype = :type')
->setParameter('type', 'blogarticle')
->distinct()
->getQuery();
$categories = $category->getResult();
你应该传递一个布尔值不同()函数。 http://www.doctrine-project.org/api/orm/2.2/class-Doctrine.ORM.QueryBuilder.html#_distinct – Omn