从 DQL 中的子查询中选择

问题描述 投票:0回答:1

我想从 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

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

doctrine symfony dql
1个回答
7
投票

使用 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

希望这有帮助...

© www.soinside.com 2019 - 2024. All rights reserved.