假设我有一个包含四个模型的 Laravel 5.5 应用程序:Class, Student,Assignment和AssignmentSubmissionAClass属于 many Students,aStudent属于 many Classes,anAssignmentSubmission属于 an Assignment、aUser和 a Class。所以表格看起来像这样:classes: id namestudents: id nameclass_student: class_id student_idassignments: id nameassignment_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_submissionsFROM `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();必须有办法做到这一点。我在这里缺少什么?
1 回答
潇潇雨雨
TA贡献1833条经验 获得超4个赞
withCount() 可以被约束。
$class->students()->withCount(['assignmentSubmissions' => function($q) use($course_id){
$q->where('course_id', $course_id);
}])->get();
这将限制该特定课程的计数。
- 1 回答
- 0 关注
- 267 浏览
添加回答
举报
0/150
提交
取消