如何检索包含所有关系记录的 Doctrine 记录?

Posted

技术标签:

【中文标题】如何检索包含所有关系记录的 Doctrine 记录?【英文标题】:How to retrieve a Doctrine record with all relational records? 【发布时间】:2010-07-31 10:35:25 【问题描述】:

我想知道是否有一种方法可以获取包含所有关系数据的记录,例如“Deep-Fetch”

因此,如果一个模型 Child 与另一个模型 Parent 相关, 我们可以获取 Child 然后通过单个查询访问 Child->Parent->name 吗?

如今,只要访问关系,Doctrine 就会触发查询。这是否太昂贵了?需要优化吗?

谢谢

【问题讨论】:

【参考方案1】:

当您从关系中选择字段时,Doctrine 会自动水合相关对象:

Doctrine_Query::create()
  ->select('a.*, c.*)
  ->from('Article a')
  ->innerJoin('Category c');

在本例中,Article 和 Category 对象都被水合了(没有进行额外的查询)。

【讨论】:

感谢库巴。这意味着我必须编写自定义查询,并且 fetch() 魔术方法没有重载! 你的意思是 find* 方法?无论如何不建议使用它们(性能方面)。

以上是关于如何检索包含所有关系记录的 Doctrine 记录?的主要内容,如果未能解决你的问题,请参考以下文章