mic*_*jnr 71 php query-builder symfony doctrine-orm
我有这个symfony代码,它检索与项目上的博客部分相关的所有类别:
$category = $catrep->createQueryBuilder('cc')
->Where('cc.contenttype = :type')
->setParameter('type', 'blogarticle')
->getQuery();
$categories = $category->getResult();
Run Code Online (Sandbox Code Playgroud)
这有效,但查询包含重复项:
Test Content
Business
Test Content
Run Code Online (Sandbox Code Playgroud)
我想DISTINCT
在我的查询中使用该命令.我见过的唯一例子要求我编写原始SQL.我想尽可能地避免这种情况,因为我试图保持所有代码相同,因此它们都使用Symfony2/Doctrine提供的QueryBuilder功能.
我尝试distinct()
像这样添加到我的查询中:
$category = $catrep->createQueryBuilder('cc')
->Where('cc.contenttype = :type')
->setParameter('type', 'blogarticle')
->distinct('cc.categoryid')
->getQuery();
$categories = $category->getResult();
Run Code Online (Sandbox Code Playgroud)
但它会导致以下错误:
致命错误:调用未定义的方法Doctrine\ORM\QueryBuilder :: distinct()
如何告诉symfony选择distinct?
小智 163
这有效:
$category = $catrep->createQueryBuilder('cc')
->select('cc.categoryid')
->where('cc.contenttype = :type')
->setParameter('type', 'blogarticle')
->distinct()
->getQuery();
$categories = $category->getResult();
Run Code Online (Sandbox Code Playgroud)
Chr*_*ris 53
如果使用"select()"语句,则可以执行以下操作:
$category = $catrep->createQueryBuilder('cc')
->select('DISTINCT cc.contenttype')
->Where('cc.contenttype = :type')
->setParameter('type', 'blogarticle')
->getQuery();
$categories = $category->getResult();
Run Code Online (Sandbox Code Playgroud)
Raf*_*ael 29
你可以写
select DISTINCT f from t;
Run Code Online (Sandbox Code Playgroud)
如
select f from t group by f;
Run Code Online (Sandbox Code Playgroud)
事情是,我现在正在进入Doctrine,所以我不能给你一个真正的答案.但是你可以如上所示,用group by模拟一个独特的并将其转换为Doctrine.如果你想添加进一步的过滤,那么HAVING
在分组后使用.