如何在 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 2 WHERE IN 子句使用实体集合

如何在 Doctrine ORM 中使用 createQueryBuilder 选择特定列?

使用 Doctrine ORM 的*** EXISTS 查询

使用 Doctrine ORM 查询当天的生日

Doctrine Orm 2 使用本机 SQL 的递归查询

如何在我的 symfony 项目中将 SQL Server 与 ORM Doctrine 连接起来?