2017-02-11 6 views
0

У меня небольшая проблема ... Я создал запрос на SQL, который отлично работает.Как преобразовать RAW SQL в DQL с запросом на LEFT JOIN

Мне нужна колонка результата запроса, которая говорит мне, существует ли эта строка в другой строке и group_ user_id.

это мой запрос в данный момент:

select u.*, 
    case when m.usuario_id = u.id 
    then 1 
    else 0 
    end as posicionado 
from usuario u 
left join (select usuario_id from matriz where matriz = 1) as m 
on u.id = m.usuario_id group by u.id 

Но когда я пытаюсь преобразовать сделать DQL, это дает проблему на left join (select.

Вот мой фактический DQL:

SELECT u, 
    CASE WHEN IDENTITY(m.usuario) = u.id 
     THEN 1 
     ELSE 0 
    END AS posicionado 
    FROM AppBundle:Usuario u 
    LEFT JOIN (SELECT IDENTITY (ma.usuario_id) FROM AppBundle:Matriz ma WHERE ma.matriz = 1) as m ON u.id = m.usuario_id group by u.id 

Это seens как если доктрина не могу понять, что запрос. Это ошибка:

[Semantical Error] line 0, col 206 near '(SELECT IDENTITY(ma.usuario_id)': Error: Class '(' is not defined.

Может кто-то помочь мне понять, как использовать Querys на РЕГИСТРИРУЙТЕСЬ с доктриной? Мне нужно его использовать с KNPPaginationBundle. И это не работает с сырым SQL.

ответ

0

Не пытайтесь использовать функцию Identity. Вы не нуждаетесь в нем, так как вы выбираете из Matriz. Но все же я бы удалил внутренний выбор и использовал как показано ниже:

SELECT u, 
CASE WHEN IDENTITY(m.usuario) = u.id 
    THEN 1 
    ELSE 0 
END AS posicionado 
FROM AppBundle:Usuario u 
LEFT JOIN AppBundle:Matriz ma ON ma.matriz = 1 AND m.usario_id = u.id 
group by u.id 

Также, если вы покажете свои сущности, я мог бы улучшить соединение.