我正在使用Doctrine ORM 1.2和Symfony 1.4,我想在myUser类中创建方法,该方法将扩展作为参数传递的Doctrine_Query实例以及一些额外的左连接和条件。诀窍是我并不总是希望这些左连接是用查询的根组件进行的,我需要知道别名对应的表(记录类) - 在某些情况下我想传递一个别名另一个组件,并期望它补充一些额外的左连接和条件。
我的问题是如何检查哪个组件(基本上是表)代表给定的别名?假设我创建了一个Doctrine_Query实例:
$query = Doctrine_Query::create();
$query->from('Folder f')->leftJoin('f.ChildFolders cf');
现在我希望myUser类中的方法可以使用别名'cf'向表中添加一些连接,但根据'cf'别名的表格会有所不同。我想这样称呼它:
$this->getUser()->limitQueryResultsWithSomeCondition($query, 'cf');
那应该返回带有其他元素的查询。如何找出'cf'别名符号化的表格以及它在给定查询中是否存在?
当它是需要扩展的查询的根表时非常简单,但在其他情况下我找不到办法。
答案 0 :(得分:2)
我想我找到了自己的问题解决方案。要找出给定别名对应的表/记录,必须使用getQueryComponent方法。假设查询与上面的问题相同。然后解决方案如下:
$alias = 'cf';
$query->getSqlQuery();
$component = $query->getQueryComponent($alias);
$recordClass = get_class($component['table']->getRecordInstance());
诀窍是在调用方法getSqlQuery(或在此方法内部调用的某个方法)之前,将找不到组件并抛出异常。