Doctrine 2 выберите count groupBy

Я пытаюсь получить ряд строк с уникальными uids.

$qb->select('COUNT() as cnt') ->from($type, 'c') ->groupBy('c.organization, c.process_role, c.domain, c.year') ->getQuery()->getSingleScalarResult() 

Но он возвращает массив групповых подсчетов. Как мне написать это правильно?

Наконец, это работает, но это некрасиво

 $count = $this->_em->createQuery( 'SELECT COUNT(c.id) FROM '.$type.' as c WHERE c.id IN (' . 'SELECT c1.id FROM ' . $type . ' c1 ' . 'GROUP BY c1.organization, c1.process_role, c1.domain, c1.year)') ->getSingleScalarResult(); 

Solutions Collecting From Web of "Doctrine 2 выберите count groupBy"

Попробуйте разбить одну groupBy в функции addGroupBy :

 $qb->select('COUNT(c) as cnt') ->from($type, 'c') ->groupBy('c.organization') ->addGroupBy('c.process_role') ->addGroupBy('c.domain') ->addGroupBy('c.year') ->getQuery()->getSingleScalarResult(); 

Однако это фактически возвращает то же самое, поскольку оно просто группирует результаты в уникальные множества этими 4 переменными. Вместо этого вы должны использовать метод выбора DISTINCT и подсчитывать полученные строки.

 $rows = $this->getDoctrine()->getManager() ->createQuery( 'SELECT DISTINCT c.organization, c.process_role, c.domain, c.year FROM ' . $type . ' c' ) ->getArrayResult(); $count = count($rows); 

Это единственный известный мне метод, который будет работать, поскольку DQL не будет поддерживать какие-либо альтернативные стратегии (например, SELECT COUNT(*) FROM (SELECT DISTINCT ... ) )

Insted из $qb->select(); используйте $qb->distinct(); , Надеюсь это работает.