2010-10-21 46 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都只是名義上不同,但爲什麼執行更具體的一個,而不是規範,自然一個?

回答