2010-09-11 17 views
2

我正在使用Doctrine ORM 1.2和Symfony 1.4,我想在myUser類中創建方法,該方法將擴展Doctrine_Query實例作爲參數傳遞給一些其他左連接和條件。訣竅是,我並不總是希望這些左連接是用查詢的根組件創建的,我需要知道別名對應的表(記錄類) - 在某些情況下,我想傳遞一個別名另一個組件,並期望它補充一些額外的左連接和條件。如何查找與Doctrine ORM查詢中的別名相關的表?

我的問題是我如何檢查什麼組件(本質上是表)給定的別名?假設我創建一個Doctrine_Query實例:

$query = Doctrine_Query::create(); 
$query->from('Folder f')->leftJoin('f.ChildFolders cf'); 

現在我想在MYUSER類我的方法添加一些加入到別名爲「CF」但根據表,「CF」的別名不同的表。我想這樣稱呼它:

$this->getUser()->limitQueryResultsWithSomeCondition($query, 'cf'); 

這應該返回帶有附加元素的查詢。怎樣才能找出'cf'alias代表哪個表以及它在給定的查詢中是否完全存在?

當它是需要擴展的查詢的根表時非常簡單,但在其他情況下找不到方法。

回答

2

我想我找到了我自己的解決方案。找出哪個表/記錄給定的別名對應一個jas使用getQueryComponent方法。假設查詢與上述問題相同。該溶液然後如下:

$alias = 'cf'; 
$query->getSqlQuery(); 
$component = $query->getQueryComponent($alias); 
$recordClass = get_class($component['table']->getRecordInstance()); 

訣竅是,方法getSqlQuery(或一些方法被稱爲該方法的內側)被調用之前的部件不會被發現和異常將被拋出。