我正在 Laravel 4 中构建一个站点的管理端,并试图让一切都在 eloquent 中运行。我正在尝试构建具有多个关系的对象。在我尝试加载次要关系之前,这似乎工作正常。
这是我对 YourDetail 模型的调用:
$applicants = YourDetail::with(array('User', 'Application', 'SecondaryEds', 'SecondaryEds.SecondaryTypes', 'SecondaryEds.SecondaryGrades', 'FurtherEds', 'FurtherEds.FurtherTypes', 'FurtherEds.FurtherGrades', 'UniEds', 'UniEds.UniClassifications', 'UniEds.UniQualifications', 'WorkExperiences', 'WhyYou', 'StartDate', 'Referer'))->whereIn('user_id', $applicants);
我所有的关系都在各种模型中定义,直接使用时可以正常工作。我遇到的问题是次要关系,例如
ForwardEds.FurtherTypes,FurtherEds.FurtherGrades,UniEds.UniClassifications,UniEds.UniQualifications,
等等
现在,当我只运行查询时,我得到的正是我所期望的——大约 20 个代表各种模型的选择查询,产生的选择查询例如引入了“FurtherEds.FurtherGrades”模型,如下所示:
select * from `further_grades` where `further_grades`.`deleted_at` is null and `further_grades`.`id` in (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
到现在为止还挺好...
当我尝试通过集合对象访问这些模型时,问题就来了;
因此,假设我现在遍历我的集合,将每个对象传递给这样的视图:
foreach($applicants as $applicant){
View::make('ApplicantView', compact('applicant'));
}
然后在我看来,我尝试遍历FurtherEds并回显出FurtherGrades模型的一个属性:
申请人视图.blade.php
@foreach($applicant->FurtherEds as $fe)
{{ $fe->FurtherGrades->name }}
@endforeach
这现在将为每个申请人创建一个新的 sql 查询,尽管我尝试进行预加载,例如
select * from `further_grades` where `further_grades`.`deleted_at` is null and `further_grades`.`id` = ? limit 1 (for each applicant)
最终结果是我的页面当前正在生成 364 选择查询,尽管页面加载速度还不错,但似乎有点过分。
谁能解释我在这里做错了什么并指出我正确的方向。