如何检索包含所有关系记录的 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 记录?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Doctrine ORM (1.2) 为预先存在的记录创建一对一关系

在 Symfony2 中使用 Doctrine DQL 时限制检索的记录数量

Doctrine 1.2 保存记录关系 UPDATE 而不是 INSERT

从 Hibernate 中的 JoinTable 中检索所有记录

如何使用 LINQ 中的外键列检索单个记录?

使用 Doctrine ORM 如何从自己的表中获取一个表来存储记录?