如何在 Doctrine ORM 查询中查找与别名相关的表?
Posted
技术标签:
【中文标题】如何在 Doctrine ORM 查询中查找与别名相关的表?【英文标题】:How to find table related with an alias in Doctrine ORM query? 【发布时间】:2010-09-11 19:40:44 【问题描述】:我正在使用 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”别名表示的表以及它在给定查询中是否存在?
当它是需要扩展的查询的根表时非常简单,但在其他情况下我找不到方法。
【问题讨论】:
【参考方案1】:我想我找到了解决问题的方法。要找出给定别名对应的表/记录,必须使用 getQueryComponent 方法。假设查询与上面的问题相同。然后解决方案如下:
$alias = 'cf';
$query->getSqlQuery();
$component = $query->getQueryComponent($alias);
$recordClass = get_class($component['table']->getRecordInstance());
诀窍是在调用getSqlQuery方法(或在该方法内部调用的某个方法)之前,不会找到组件并抛出异常。
【讨论】:
以上是关于如何在 Doctrine ORM 查询中查找与别名相关的表?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Doctrine ORM 中使用 createQueryBuilder 选择特定列?