假设我有一个包含四个模型的 Laravel 5.5 应用程序:
Class, Student,Assignment和AssignmentSubmission
AClass属于 many Students,aStudent属于 many Classes,anAssignmentSubmission属于 an Assignment、aUser和 a 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
现在,在查询构建器类中,我需要构建一个查询,该查询返回Students属于 的 ,并Class带有一个额外的列,该列会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();
必须有办法做到这一点。我在这里缺少什么?
潇潇雨雨