Как выбрать отдельный запрос с помощью 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?

757   3  

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

    Ничего не найдено.