访问嵌套的预先加载模型,而不会在 php activerecord 中引起 N+1 个查询


Access nested eager loaded model without causing N+1 queries in php activerecord

我正在加载一个名为 Maintenance_Record 的模型,其中包含嵌套的急切负载,如下所示:

Maintenance_Record::find('all', array('include' => array('maintenance_plan' => array('user') ) ) );

如您所见,我渴望加载Maintenance_Plan用户用户嵌套在Maintenance_Plan中。我想在我的视图中使用Maintenance_Record模型中的用户模型。我的一个视图有一个循环,如下所示:

foreach( $records as $record )
    echo $record->maintenance_plan->user->first_name;

但是,当我查看 SQL 时,activerecord 在循环中每次调用加载每个用户模型,从而导致 N+1 次调用。

当我var_dump Maintenance_Record模型时,Maintenance_Plan用户被正确加载。所以问题是我如何在不引起 N+1 查询的情况下访问嵌套的预先加载模型?

phpactiverecord 中的三级关联

这是一个没有得到太多关注的错误,但我相当确定这就是你在这里遇到的。