2010-04-16 60 views
0

我試圖執行一個查詢,但我得到一個錯誤:原則:未知的表別名。這個DQL是否正確?

Unknown table alias

表是設置如下:

Template_Spot hasOne Template 
Template  hasMany Template_Spot 
Template  hasMany Location 
Location  hasOne Template 

我試圖執行以下DQL:

$locationid = 1; 
$spots = Doctrine_Query::create() 
    ->select('cts.*, ct.*, uc.*') 
    ->from('Template_Spot cts') 
    ->innerJoin('Template ct') 
    ->innerJoin('Location uc') 
    ->where('uc.locationid = ?', $locationid)->execute(); 

有沒有人發現問題?

回答

1

嘗試找出該表的別名是不被認可。我認爲這是試圖加入Template_Spot與位置,在這種情況下,你可能需要做的:

[pseudo code] 
FROM Template_Spot cts, cts.Template ct, ct.Location uc 

有時候只是定義模式中的別名和foreignAlias名稱也可能會有幫助,得到學說很容易混淆。有了這樣的多個連接,Doctrine有時可能會生成更多的SQL查詢,而且您可能希望完全繞過DQL。

+0

以及它應該是cts.Template ct和cts.Location uc,因爲Template_Spot是帶額外列的refclass。這些應該加載不同? – Ropstah 2010-04-18 00:44:35

0

如果您選擇所有字段,則根本不需要->select()

它不應該是:

$spots = Doctrine_Query::create() 
    ->from('Template_Spot cts') 
    ->leftJoin('Template ct') 
    ->leftJoin('Location uc') 
    ->where('uc.id = ?', $locationid) 
    ->execute();