如何在ORM查询中查找与别名相关的表?

如何在ORM查询中查找与别名相关的表?,orm,symfony1,doctrine,Orm,Symfony1,Doctrine,我正在使用Doctrine ORM 1.2和Symfony 1.4,我想在myUser类中创建一个方法,该方法将扩展作为参数传递的Doctrine_查询实例,并带有一些附加的左连接和条件。诀窍在于,我并不总是希望这些左连接与查询的根组件进行连接,我需要知道别名与哪个表(记录类)相对应——在某些情况下,我希望传递另一个组件的别名,并希望它能得到一些额外的左连接和条件的补充 我的问题是如何检查哪个组件(本质上是表)表示给定的别名?假设我创建了一个查询实例: $query = Doctrine_Que

我正在使用Doctrine ORM 1.2和Symfony 1.4,我想在myUser类中创建一个方法,该方法将扩展作为参数传递的Doctrine_查询实例,并带有一些附加的左连接和条件。诀窍在于,我并不总是希望这些左连接与查询的根组件进行连接,我需要知道别名与哪个表(记录类)相对应——在某些情况下,我希望传递另一个组件的别名,并希望它能得到一些额外的左连接和条件的补充

我的问题是如何检查哪个组件(本质上是表)表示给定的别名?假设我创建了一个查询实例:

$query = Doctrine_Query::create();
$query->from('Folder f')->leftJoin('f.ChildFolders cf');
现在,我想让myUser类中的方法向别名为“cf”的表添加一些联接,但根据别名为“cf”的表而有所不同。我想这样称呼它:

$this->getUser()->limitQueryResultsWithSomeCondition($query, 'cf');
这将返回包含其他元素的查询。如何找出哪个表由“cf”别名表示,以及它在给定查询中是否存在


当查询的根表需要扩展时,这非常简单,但在其他情况下,我找不到一种方法来扩展它。

我想我找到了自己的解决方案。要找出给定别名对应的表/记录,必须使用getQueryComponent方法。假设查询与上面讨论的相同。然后,解决方案如下:

$alias = 'cf';
$query->getSqlQuery();
$component = $query->getQueryComponent($alias);
$recordClass = get_class($component['table']->getRecordInstance());
诀窍在于,在调用方法getSqlQuery(或在该方法内部调用的某个方法)之前,将找不到组件,并引发异常