如何使用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();