如何使用symfony2原则查询构建器选择不同的查询?

2022-08-30 08:16:19

我有这个symfony代码,它检索与我的项目上的博客部分相关的所有类别:

$category = $catrep->createQueryBuilder('cc')
    ->Where('cc.contenttype = :type')
    ->setParameter('type', 'blogarticle')
    ->getQuery();

$categories = $category->getResult();

这有效,但查询包含重复项:

Test Content
Business
Test Content

我想在我的查询中使用该命令。我见过的唯一例子要求我编写原始SQL。我想尽可能避免这种情况,因为我试图保持我所有的代码都相同,所以他们都使用Symfony2 / Doctrine提供的QueryBuilder功能。DISTINCT

我尝试像这样添加到我的查询中:distinct()

$category = $catrep->createQueryBuilder('cc')
    ->Where('cc.contenttype = :type')
    ->setParameter('type', 'blogarticle')
    ->distinct('cc.categoryid')
    ->getQuery();

$categories = $category->getResult();

但它会导致以下错误:

致命错误:调用未定义方法 Doctrine\ORM\QueryBuilder::d istinct()

如何告诉 symfony 选择不同?


答案 1

这有效:

$category = $catrep->createQueryBuilder('cc')
        ->select('cc.categoryid')
        ->where('cc.contenttype = :type')
        ->setParameter('type', 'blogarticle')
        ->distinct()
        ->getQuery();

$categories = $category->getResult();

编辑 Symfony 3 & 4。

您应该使用而不是->groupBy('cc.categoryid')->distinct()


答案 2

如果使用“select()”语句,则可以执行以下操作:

$category = $catrep->createQueryBuilder('cc')
    ->select('DISTINCT cc.contenttype')
    ->Where('cc.contenttype = :type')
    ->setParameter('type', 'blogarticle')
    ->getQuery();

$categories = $category->getResult();

推荐