2014-01-04 3 views
1

Я просто работаю над проектом (Symfony2) с двумя объектами с соединением ORM со многими-ко-многим. Сейчас я веду с ума по этому DQL запроса:DQL Query with LEFT JOIN and COUNT

SELECT p, COUNT(s.id) AS countSup FROM AapFrontendBundle:Paper p LEFT JOIN p.supervisors s WHERE (countSup = 0) GROUP BY p.id 

с выходом SQL:

SELECT p0_.id AS id0, 
p0_.title AS title1, 
p0_.description AS description2, 
p0_.research_questions AS research_questions3, 
p0_.basic_literature AS basic_literature4, 
p0_.student AS student5, p0_.status AS status6, 
p0_.category AS category7, 
p0_.type AS type8, 
p0_.hash AS hash9, 
COUNT(u1_.id) AS sclr10, 
p0_.insertBy AS insertBy11 

FROM paper p0_ 
LEFT JOIN supervisors s2_ 
ON p0_.id = s2_.paperId 
LEFT JOIN user u1_ 
ON u1_.id = s2_.userId 

WHERE (sclr10 = 0) GROUP BY p0_.id 

И получил сообщение об ошибке

Column not found: Unknown column 'sclr10' in 'where clause' 

В таблице "контролеры" используется для отношений «многие-ко-многим» между документами и пользователями. В принципе, я хочу использовать этот запрос в бумажном репозитории, чтобы найти все бумажные объекты без связанного пользователя в качестве супервизоров.

ответ

1

Вы можете использовать GROUP BY/HAVING сочетание:

SELECT ... 

FROM paper p0_ 
LEFT JOIN supervisors s2_ 
ON p0_.id = s2_.paperId 
LEFT JOIN user u1_ 
ON u1_.id = s2_.userId 

GROUP BY p0_.id 
HAVING COUNT(u1_.id) = 0