如何使用LEFT JOIN上的查询将RAW SQL转换为DQL

时间:2017-02-11 02:09:37

标签: doctrine-orm symfony dql

我遇到了一个小问题......我创建了一个完全正常的SQL查询。

我需要一个关于查询结果的列,它告诉我这行是否存在于另一行中,以及是否按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

但是当我尝试转换do 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

就像Doctrine无法理解该查询一样。这是错误:

  

[语义错误]第0行,第206列附近'(SELECT   IDENTITY(ma.usuario_id)':错误:类'('未定义。

有人可以帮助我了解如何在使用Doctrine加入Querys吗? 我需要它与KNPPaginationBundle一起使用。它不适用于原始SQL。

1 个答案:

答案 0 :(得分:0)

尽量不要使用filter功能。因为您从Matriz中选择,所以您不需要它。但我仍然会删除内部选择并使用如下:

Identity

此外,如果您要显示您的实体,我可以改善加入。