将 SQL 转换为 DQL(学说)

Convert SQL TO DQL ( doctrine)

我想使用 Doctrine "Query Builder"

将 SQL 请求转换为 DQL
SELECT e1.id, e1.name, (SELECT COUNT() FROM (SELECT id FROM element e2 WHERE 
        e2.parent_id = e1.id LIMIT 1000) as e3  )

FROM element e1
WHERE
    e1.parent_id = xxx
AND
    e1.element_type_id = xxx

可能吗?

你可以为以上 SQL 编写如下 DQL

SELECT e1.id, e1.name, COUNT(*) somealias
FROM YourBundle:Element e1
LEFT JOIN YourBundle:Element e2 WITH e1.id = e2.parent_id
WHERE e1.parent_id = xxx
AND e1.element_type_id = xxx
GROUP BY e1.id

I don't see the logic of using LIMIT in sub select.

如果您将实体中的 parent_id 关联定义为 childs 会更容易,我猜 ManyToOne 用于单向关系,学说将执行连接部分,因此您不需要'必须使用 WITH 子句,您的 DQL 将变得像

SELECT e1.id, e1.name, COUNT(*) somealias
FROM YourBundle:Element e1
LEFT JOIN e1.childs e2
WHERE e1.parent_id = xxx
AND e1.element_type_id = xxx
GROUP BY e1.id