/** * Using this method for two different AJAX request. One for enroll course & one for save result * * Display the specified resource. * * @param Request $request * @param $id * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response */ public function show(Request $request, $id) { if ($request->ajax()) { $studentInfo = Student::join('departments', 'students.department_code', '=', 'departments.code')->select('students.name', 'students.email', 'students.department_code', 'departments.name as department')->where('students.registration_no', '=', $id)->first(); if ($request->has('grade')) { /** * Select courses of a student which is not being graded * @var TYPE_NAME $courses */ $courses = Course::join('course_student', 'courses.code', '=', 'course_student.course_code')->select('courses.code', 'courses.name')->where('course_student.student_registration_no', $id)->where(function ($query) { $query->whereNull('course_student.grade')->orWhere('course_student.grade', ''); })->get(); } elseif ($request->has('result')) { $student = Student::find($id); /** Check whether user can see the result * @var TYPE_NAME $this */ $this->authorize('viewResult', $student); $courses = Course::join('course_student', 'courses.code', '=', 'course_student.course_code')->select('courses.code', 'courses.name', 'course_student.grade')->where('course_student.student_registration_no', $id)->get(); } else { $courses = Course::select('courses.code', 'courses.name')->where('courses.department_code', '=', $studentInfo->department_code)->whereNotIn('courses.code', function ($query) use($id) { $query->select('course_student.course_code')->from('course_student')->where('course_student.student_registration_no', '=', $id); })->get(); } return response([$studentInfo, $courses]); } }