Как выбрать отдельный запрос с помощью Symfony2 doctrine query builder?
у меня есть этот код 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/Учение.
Я пробовал добавлять distinct() на мой запрос, как это:
$category = $catrep->createQueryBuilder('cc')
->Where('cc.contenttype = :type')
->setParameter('type', 'blogarticle')
->distinct('cc.categoryid')
->getQuery();
$categories = $category->getResult();
но это приводит к следующей ошибке:
неустранимая ошибка: вызов неопределенного метода DoctrineORMQueryBuilder:: distinct ()
как мне сказать symfony, чтобы выбрать distinct?
3 ответов:
вы могли бы написать
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();
Comments