假設(shè)我有一個(gè)包含四個(gè)模型的 Laravel 5.5 應(yīng)用程序:Class, Student,Assignment和AssignmentSubmissionAClass屬于 many Students,aStudent屬于 many Classes,anAssignmentSubmission屬于 an Assignment、aUser和 a Class。所以表格看起來(lái)像這樣:classes: id namestudents: id nameclass_student: class_id student_idassignments: id nameassignment_submissions: id class_id student_id assignment_id現(xiàn)在,在查詢構(gòu)建器類中,我需要構(gòu)建一個(gè)查詢,該查詢返回Students屬于 的 ,并Class帶有一個(gè)額外的列,該列會(huì)total_assignment_submissions記錄學(xué)生僅為該類提交的作業(yè)數(shù)量。我的第一個(gè)??扛廴缦拢?class->students()->withCount('assignmentSubmissions')->get();但這會(huì)返回該學(xué)生所有課程的總作業(yè)提交。以下 mySql 查詢返回正確的數(shù)據(jù):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` = ?但我似乎無(wú)法以正確的順序獲得selectSub() addSelect()和raw()電話來(lái)獲得我想要的東西。似乎我只使用原始查詢執(zhí)行此操作,但事件 ID 將未經(jīng)處理,否則我可以執(zhí)行此操作,但它只返回該assignment_count字段,而不返回student.$class->students() ->selectSub( AssignmentSubmission::selectRaw('count(*)') ->whereClassId($class->id)->getQuery(), 'total_assignment_submissions' )->toSql();必須有辦法做到這一點(diǎn)。我在這里缺少什么?
1 回答

瀟瀟雨雨
TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊
withCount() 可以被約束。
$class->students()->withCount(['assignmentSubmissions' => function($q) use($course_id){
$q->where('course_id', $course_id);
}])->get();
這將限制該特定課程的計(jì)數(shù)。
- 1 回答
- 0 關(guān)注
- 279 瀏覽
添加回答
舉報(bào)
0/150
提交
取消