2016-06-22 2 views
0

Я предпочитаю принудительно использовать конструктор запросов в своем проекте, я нахожу, что sql, который он производит, более предсказуем, чем писать прямой DQL (в прошлом он делал некоторые очень странные объединения) , Тем не менее, я обнаружил, что этот DQL - единственный способ, которым я могу выполнить этот запрос агрегирования.Doctrine2 эквивалент DQL в построителе запросов

$q = $this->getEntityManager()->createQuery(<<<DQL 
     SELECT IDENTITY(p.business, 'id') as businessId, SUM(p.amount) as points 
     FROM APIBundle\Entity\Point p 
     WHERE IDENTITY(p.user, 'id') = :user 
     GROUP BY p.business 
DQL 
) 
     ->setParameter('user', $user->getId()) 
    ; 

    return $q; 

Это мой единственный вариант или можно использовать конструктор запросов для получения того же результата?

Я получаю некоторое представление о том, что построитель запросов больше представляет собой инструмент orm с гидратацией и т. Д., Но не так полезен для более массивных негидратированных запросов.

ответ

0

Да, агрегация представляет собой сложный бит для любой ORM. Вы можете использовать Low level API, чтобы обернуть часть DQL в построитель запросов, если хотите:

$queryBuilder->add('select', 'SUM(p.amount) as points');