2011-12-16 97 views
0

我在Symfony 1.4中使用Doctrine 1.2來編寫查詢。我理解了DQL的原則,並且我有幾個查詢可以正常工作。但是對於一些需求,我沒有在DQL中找到解決方案,而是使用SQL來代替。學說1.2:在DQL中將用戶配置文件加入城市和城市國家/地區

下面是一個簡單的例子:假設你在你的schema.yml有sfguarduserprofile類關係到一個城市類(使用配置文件中的city_id)。 而且你在城市級別和國家級別之間有聯繫(在城市級別使用country_id)。

我只是想寫一個DQL查詢來獲取與城市的名稱和國家的名稱,用戶配置文件。看起來很簡單?

是的,但我沒有發現DQL一個「乾淨」的解決方案,因爲我沒有sfguarduserprofile和國家類之間有直接的別名或關係。

我可以創造我sfguarduserprofile和我的祖國類之間的直接關係,但我不會再尊重模型化的最佳實踐(MERISE)。

我可以使用我的城市類中的選擇並獲取用戶配置文件和國家(城市與這兩個表具有關係),但是我無法使用此解決方案,因爲我的sfguarduser配置文件中有其他聯接。

在SQL中,這是很容易的,但我想用教義對象。

如果你有一個「乾淨」的解決方案,我會很高興知道它!

謝謝

Sandrino

回答

0

我找到了解決辦法,這是簡單的,但因爲我的schema.yml沒有爲原則優化它沒有在過去的工作。這是一個工作查詢的例子:

$q = Doctrine_Query::create() 
     ->select('p.user_id, u.username, c.name, co.name') 
     ->from('sfGuardUserProfile p') 
     ->leftJoin('p.User u') 
     ->leftJoin('p.City c') 
     ->leftJoin('c.Country co') 
     ->orderBy('p.user_id');