Подтвердить что ты не робот

Как выбрать отдельный запрос с помощью построителя запросов symfony2?

У меня есть этот код symfony, где он извлекает все категории, связанные с разделом блога в моем проекте:

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

$categories = $category->getResult();

Это работает, но запрос включает в себя дубликаты:

Test Content
Business
Test Content

Я хочу использовать команду DISTINCT в моем запросе. Единственные примеры, которые я видел, требуют, чтобы я написал сырой SQL. Я хочу избежать этого как можно больше, поскольку я пытаюсь сохранить весь свой код таким же, чтобы все они использовали функцию QueryBuilder, предоставленную Symfony2/Doctrine.

Я попробовал добавить distinct() к моему запросу:

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

$categories = $category->getResult();

Но это приводит к следующей ошибке:

Неустранимая ошибка: вызов метода undefined Doctrine\ORM\QueryBuilder:: distinct()

Как указать symfony выбрать отдельный?

4b9b3361

Ответ 1

вы могли написать

select DISTINCT f from t;

а

select f from t group by f;

Дело в том, что я сейчас вхожу в Доктрину, поэтому я не могу дать вам реальный ответ. но вы могли бы, как показано выше, моделировать четкую группу и преобразовать ее в Doctrine. если вы хотите добавить дополнительную фильтрацию, используйте HAVING после группы.

Ответ 2

Это работает:

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

$categories = $category->getResult();

Ответ 3

Если вы используете инструкцию "select()", вы можете сделать это:

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

$categories = $category->getResult();