Как выбрать отдельный запрос с помощью построителя запросов symfony2 doctrine?
У меня есть этот код 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();
Но это приводит к следующей ошибке:
Неустранимая ошибка: Вызов неопределенного метода Doctrine\ORM\QueryBuilder::distinct()
Как мне указать symfony выбрать distinct?
3 answers
Вы могли бы написать
select DISTINCT f from t;
Как
select f from t group by f;
Дело в том, что в настоящее время я сам только начинаю изучать Доктрину, поэтому я не могу дать вам реальный ответ. но вы могли бы, как показано выше, смоделировать различие с помощью group by и преобразовать его в Доктрину. если вы хотите добавить дополнительную фильтрацию, используйте HAVING
после group by.
Это работает:
$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();