Activerecord 处理yii2中的N+1查询
有人知道Yii的ActiveRecord上是否有一个功能可以帮助我们防止N+1查询吗 在下面的示例中,我们需要从人员获取文档,并在视图中显示人员的姓名及其文档列表。如果我使用$model->findAll[…];类似下面的代码: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
<?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个查询-第一个用于加载所有人员,第二个用于加载与这些人员相关的所有文档
这在第节的活动记录文档中有很好的解释