Я пытаюсь преобразовать этот SQL в конструктор запросов доктрины, но не смог создать подзапрос в объединении.Фактический запрос содержит несколько объединений, но я просто хочу, чтобы мне нужно было иметь подзапрос в объединении.
Запрос:
SELECT id, venue_name, mediahawk_clicks
FROM location LEFT OUTER JOIN
(SELECT location_id, sum(total_calls) as mediahawk_clicks FROM mediahawk_stat GROUP BY location_id) AS calls
ON location.id = calls.location_id
Вот что я пробовал!
$em = $this->getEntityManager();
$mediaHawkSubSelect = $em->createQueryBuilder();
$mediaHawkSubSelect->select("ms.locationId, SUM(ms.totalCalls) as mediahawkClicks")
->from('AppBundle:MediahawkStat', 'ms');
$q = $em->createQueryBuilder();
$q->from('AppBundle\Entity\Location', 'q')
->select("q.id, q.venueName");
$q->where('q.publishedStatus = 1')
$q->groupBy('q.id');
$q->leftJoin(sprintf("(%s)", $mediaHawkSubSelect->getQuery()->getSQL()).")", 'md','WITH', 'q.id = md.locationId')
->addSelect('SUM(md.totalCalls) as mediahawkClicks');
Вот сформированный DQL:
SELECT q.id, q.venueName, SUM(md.totalCalls) as mediahawkClicks
FROM AppBundle\Entity\Location q INNER JOIN
(SELECT m0_.location_id AS location_id_0, SUM(m0_.total_calls) AS sclr_1 FROM mediahawk_stat m0_)) md
WITH q.id = md.locationId GROUP BY q.id
Но когда я пытаюсь получить результаты QQuery.Выдает ошибку:
[Semantical Error] line 0, col 108 near '(SELECT m0_.location_id': Error: Class '(' is not defined.
Любая помощь в преобразовании вышеупомянутого запроса в построитель запросов Doctrine будет принята с благодарностью.
Спасибо