2010-10-21 77 views
2

我有以下SQL查询:我的DQL查询有什么“错误”?

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'); 

这本来是很高兴已经能够使用“连接()”方法,但是,从官方它说,Doctrine在这里加入文档,“DQL支持两种连接INNER JOIN和LEFT JOIN”。由于某种原因彻底逃脱了我,他们选择不支持自然连接。无论如何,这意味着上述两个查询是我唯一的选择。那么,这是不幸的,因为他们都没有工作

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

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

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

顺便说一句,我意识到INNER JOIN和JOIN都只是名义上不同,但为什么执行更具体的一个,而不是规范,自然一个?

回答