我想从 DQL 中子查询的结果中执行 SELECT。相当于在 SQL 中执行以下操作:
SELECT * FROM ( SELECT foo1,foo2 FROM bar ) where foo1='something';
我遇到的问题是它抱怨
Error: Class '(' is not defined
产生该错误的实际 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
重申一下,如何从子查询中执行选择?
使用 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
希望这有帮助...