Я собираю администраторскую часть сайта в Laravel 4 и стараюсь сделать все работающим в красноречиве. Я пытаюсь построить объект с несколькими отношениями. Кажется, это работает нормально, пока я не попытаюсь загрузить вторичные отношения.Laravel - Помогите с загрузкой вторичных отношений (в настоящее время у меня есть 364 SQL-запросов)
Вот мой призыв к YourDetail Model:
$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);
Все мои отношения определяются в различных моделях и прекрасно работают при использовании непосредственно. Проблема, с которой я сталкиваюсь, связана со вторичными отношениями, например.
FurtherEds.FurtherTypes, FurtherEds.FurtherGrades, UniEds.UniClassifications, UniEds.UniQualifications,
и т.д.
Теперь, когда я просто запустить запрос я получаю именно то, что я хотел бы ожидать - около 20 Выберите запросы, представляющие различные модели, например, запрос выбора, который добавляет модель «Дальнейшие результаты», выглядит следующим образом:
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 :
ApplicantView.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 запросов на выборку, что хотя скорость загрузки страницы не плохо, кажется немного чрезмерным.
Может кто-нибудь объяснить, что я здесь делаю неправильно, и указать мне в правильном направлении.
это вместо этого создает свежие запросы sql -> это не так. Laravel не будет создавать новый запрос, если у вас есть нетерпимые загруженные отношения модели. –
^^ Может быть исправлено в более новых версиях красноречия, пожалуйста, не просто укажите, что это не так, это, безусловно, было в версии u sed при доступе с использованием имен модели StudlyCaps – WebweaverD