【发布时间】:2019-11-10 11:26:27
【问题描述】:
假设我有一个包含四个模型的 Laravel 5.5 应用:
Class、Student、Assignment 和 AssignmentSubmission
Class 属于许多 Students,Student 属于许多 Classes,AssignmentSubmission 属于 Assignment、User 和 Class。
所以表格看起来像这样:
classes:
id
name
students:
id
name
class_student:
class_id
student_id
assignments:
id
name
assignment_submissions:
id
class_id
student_id
assignment_id
现在,在查询构建器类中,我需要构造一个查询,该查询返回属于Class 的Students,并带有一个名为total_assignment_submissions 的额外列,其中记录学生提交了多少作业仅限该类。
我的第一个停靠港如下:
$class->students()->withCount('assignmentSubmissions')->get();
但这会返回该学生在所有课程中提交的作业总数。
以下 mySql 查询返回正确的数据:
SELECT *,
(SELECT Count(*)
FROM `assignment_submission`
WHERE `student_id` = `students`.`id`
AND `class_id` = ?) AS total_assignment_submissions
FROM `students`
INNER JOIN `class_student`
ON `students`.`id` = `class_student`.`student_id`
WHERE `class_student`.`class_id` = ?
但我似乎无法以正确的顺序拨打selectSub() addSelect() 和raw() 来获得我想要的东西。似乎我只使用原始查询执行此操作,但事件 id 将未经处理,否则我可以执行此操作,但它仅返回 assignment_count 字段,而不返回 student 的其余字段。
$class->students()
->selectSub(
AssignmentSubmission::selectRaw('count(*)')
->whereClassId($class->id)->getQuery(),
'total_assignment_submissions'
)->toSql();
必须有办法做到这一点。我在这里错过了什么?
【问题讨论】:
标签: php sql laravel eloquent subquery