У меня есть код, который работает, но без желания загружать вложенные отношения.Laravel нетерпеливо загружает вложенные отношения с пользовательским запросом
$projects = Project::with('organization')
->leftJoin('stages', 'stages.project_id', '=', 'projects.id')
->leftJoin('activities', 'activities.stage_id', '=', 'stages.id')
->leftJoin('tasks', 'tasks.activity_id', '=', 'activities.id')
->select('projects.*', DB::raw('SUM(IF(tasks.status = 4, score, 0)) AS score'),
DB::raw('SUM(tasks.score) AS total_score'))
->groupBy('projects.id')
->get();
Я хочу сделать это с жадной загрузкой вложенных отношений, и если я не буду иметь эти пользовательские выбирает (total_score и оценка), я бы
$projects = Project::with('stages.activities.tasks');
, но на тех, кто появляется проблема пользовательский выбор (оценка и total_score). я пытался что-то подобное, но не работает
$projects = Project::with(['stages', 'activities', 'tasks' => function($q) {
$q->select(DB::raw('SUM(IF(tasks.status = 4, score, 0)) AS score'),
DB::raw('SUM(tasks.score) AS total_score'));
}])->get();
Как бы SQL это идеально выглядело? Если я правильно понимаю ваш вопрос, может быть более эффективным сделать это как 2 запроса – rpgFANATIC