将 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
我想使用 Doctrine "Query Builder"
将 SQL 请求转换为 DQLSELECT 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