Activerecord 处理yii2中的N+1查询

Activerecord 处理yii2中的N+1查询,activerecord,yii,yii2,Activerecord,Yii,Yii2,有人知道Yii的ActiveRecord上是否有一个功能可以帮助我们防止N+1查询吗 在下面的示例中,我们需要从人员获取文档,并在视图中显示人员的姓名及其文档列表。如果我使用$model->findAll[…];类似下面的代码: <?php foreach( $people as $person ): ?> <li><?= $person->name</li> <li> <ul> <?php

有人知道Yii的ActiveRecord上是否有一个功能可以帮助我们防止N+1查询吗

在下面的示例中,我们需要从人员获取文档,并在视图中显示人员的姓名及其文档列表。如果我使用$model->findAll[…];类似下面的代码:

<?php foreach( $people as $person ): ?>
  <li><?= $person->name</li>
  <li>
    <ul>
      <?php foreach( $person->documents as $document ): ?>
        <li><?= $document->number; ?></li>
      <?php endforeach; ?>
    </ul>
  </li>
<?php endfoeach; ?>
Yii将多次查询数据库。 在RubyonRails的ActiveRecord中,他们有一个include方法,我们可以在其中使用类似于:People.includes“documents”的内容

通过这种方式,ActiveRecord减少了获取这两个对象的查询量

有人知道这方面的情况吗?

您需要使用方法注册急切加载规则

$people = Person::find()->with('documents')->all();
这将创建2个查询-第一个用于加载所有人员,第二个用于加载与这些人员相关的所有文档

这在第节的活动记录文档中有很好的解释