【问题标题】:Convert SQL TO DQL ( doctrine)将 SQL 转换为 DQL(学说)
【发布时间】:2017-09-06 12:50:42
【问题描述】:

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

有可能吗?

【问题讨论】:

    标签: doctrine dql


    【解决方案1】:

    您可以为上述 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
    

    我没有看到在子选择中使用 LIMIT 的逻辑。

    如果您将实体中的 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 2015-10-11
      • 2012-03-11
      相关资源
      最近更新 更多