У меня есть этот код 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 выбрать отдельный?
вы могли написать
select DISTINCT f from t;
а
select f from t group by f;
Дело в том, что я сейчас вхожу в Доктрину, поэтому я не могу дать вам реальный ответ. но вы могли бы, как показано выше, моделировать четкую группу и преобразовать ее в 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();