从DQL中的子查询中选择

dre*_*wag 7 doctrine dql symfony

我想从DQL中的子查询结果中执行SELECT.相当于在SQL中执行以下操作:

SELECT * FROM ( SELECT foo1,foo2 FROM bar ) where foo1='something';
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是它抱怨

Error: Class '(' is not defined
Run Code Online (Sandbox Code Playgroud)

产生该错误的实际DQL是:

SELECT u FROM (
    SELECT u, COUNT(u) as total
        FROM Utterance u LEFT JOIN u.recordings r
        WHERE r.speaker IS NULL OR r.speaker <> 5
        GROUP BY u.id
    ) matched WHERE total < 5
Run Code Online (Sandbox Code Playgroud)

重申一下,如何从子查询中执行选择?

Jov*_*vic 6

使用DQL我很确定这是不可能的,但如果你真的需要它,你可能想检查:

Doctrine Native SQL.(示例,来自同一页面的永久链接)

它要复杂得多,但它也让你可以自由地发送原生查询并执行它(对我来说,棘手的部分就是对象保湿).

另一方面,如果最后一个代码段类似于您要实现的任何内容,则有一种更简单的方法,不需要子查询:

SELECT u
    FROM Utterance u LEFT JOIN u.recordings r
    WHERE r.speaker IS NULL OR r.speaker <> 5
    GROUP BY u.id HAVING COUNT(u) < 5
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助...

  • @drewag,如果在此处共享,您的原始查询的最终结果将非常有趣.(我知道它已经过去了将近4年但是......)谢谢 (3认同)
  • 您是否设法以干净的方式解决物体水化问题? (2认同)