访问嵌套的eager加载模型,而不会在php activerecord中导致N + 1查询

时间:2012-06-15 15:21:50

标签: php codeigniter phpactiverecord

我正在加载一个名为 Maintenance_Record 的模型,其嵌套的eager load如此:

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查询的情况下访问嵌套的预先加载的模型?

1 个答案:

答案 0 :(得分:0)

Triple level associations in phpactiverecord

这是一个没有引起太多关注的错误,但我很确定这就是你在这里遇到的问题。