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