【发布时间】:2015-05-02 07:13:13
【问题描述】:
我有可以工作的代码,但没有急切地加载嵌套关系。
$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 和 score),我会这样做
$projects = Project::with('stages.activities.tasks');
但问题出现在那些自定义选择(score 和 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 个查询可能会更有效
标签: laravel eloquent eager-loading