我有一個直接的「項目」模型。一個項目可以有很多任務,每個任務都屬於一個員工。 我有一個頁面顯示+ - 100個項目,以及所有相關(獨特)員工。這導致500多個查詢被執行,所以頁面加載時間猛增到不可接受的水平。所以我給了急切的加載一個嘗試:Laravel 4.1 Eager正在加載工作,但查詢仍然在視圖中執行
$projects->with(array('tasks' => function($query)
{
$query->select('project_id', 'employee_id')->distinct()->get();
}));
據我可以告訴通過調試,這給了我想要的結果。對於每個項目,都可以正確檢索任務,而不會有重複的員工。
但是,當我嘗試在視圖中加載任務時,Laravel仍然執行400多個查詢來檢索每個項目的任務。
@foreach ($projects as $project)
@foreach($project->tasks as $task)
@if($task->employee_id != 0)
<img src="{{UserHelper::getGravatarUrl($task->employee->id)}}" alt="{{{ $task->employee->name }}}"
@endif
@endforeach
@endforeach
我一直在使用tasks()
和tasks()->get()
而不是嘗試過,但都無濟於事。我如何訪問急切加載的屬性? 我不喜歡使用髒原始查詢,因爲Eloquent應該完成任務。
事實證明,即使在匿名函數中使用get(),渴望的加載仍然按預期工作。這是UserHelper多次檢索用戶。你的解釋很好,但是急切的裝載就是這樣。 – Maarten00
@ Maarten00來自非熱切的加載框架和純SQL連接等 - 我知道它是如何感覺:) – azngunit81