【问题标题】:What's "wrong" with my DQL query?我的 DQL 查询有什么“错误”?
【发布时间】:2010-10-21 16:16:34
【问题描述】:

我有以下 SQL 查询:

select bank.*
from bank
join branch on branch.bank_id = bank.id
join account a on a.branch_id = branch.id
join import i on a.import_id = i.id

它返回的正是我所期望的。

现在考虑以下两个 DQL 查询:

      $q = Doctrine_Query::create()
        ->select('Bank.*')
        ->from('Bank')
        ->leftJoin('Branch')
        ->leftJoin('Account')
        ->leftJoin('Import');

-

      $q = Doctrine_Query::create()
        ->select('Bank.*')
        ->from('Bank')
        ->innerJoin('Branch')
        ->innerJoin('Account')
        ->innerJoin('Import');

能够使用“join()”方法会很好,但是,从官方 Doctrine 连接文档here,它说,“DQL 支持两种连接 INNER JOIN 和 LEFT JOIN。”出于某种完全让我无法理解的原因,他们选择不支持自然连接。无论如何,这意味着上面的两个查询是我唯一的选择。好吧,这很不幸,因为它们都不起作用

第一个查询 - 带有左连接的查询 - 不起作用,因为当然,左连接和自然连接是两个不同的东西。

第二个查询也不起作用。令人费解的是,我收到一个错误:“未知关系别名。”

为什么 Doctrine 能够找出 LEFT JOIN 而不是 INNER JOIN 的别名?

顺便说一句,我意识到 INNER JOIN 和 JOIN 只是名义上不同,但为什么要实现更具体的而不是规范的、自然的呢?

【问题讨论】:

    标签: sql symfony1 doctrine dql


    【解决方案1】:
        ->select('b.*')
        ->from('Bank b')
        ->leftJoin('b.Branch h')
    
        ->select('b.*')
        ->from('Bank b')
        ->innerJoin('b.Branch h')
    

    http://www.doctrine-project.org/documentation/manual/1_1/en/dql-doctrine-query-language:join-syntax

    【讨论】:

      猜你喜欢
      • 2020-03-21
      • 1970-01-01
      • 2013-12-03
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多