Как передать данные текущей / основной модели в ограничение eagerload для использования в качестве переменной - PullRequest
0 голосов
/ 09 апреля 2020
$studentIds = ExamRoutineDetail::where('routine_id', $routineId)
        ->distinct()
        ->pluck('student_id')
        ->all();

    $data = Student::whereIn('id', $studentIds)
        ->where('school_id', $schoolId)
        ->where('grade_id', $gradeId)
        ->with([
            'routine_detail'                                    => function ($query) use ($routineId) {
                $query->where('routine_id', $routineId);
            },
            'routine_detail.routine',
            'routine_detail.routine.routine_info'               => function ($query) use ($routineId) {
                $query->where('routine_id', $routineId);
            },
            'routine_detail.routine.routine_info.student_marks' => function ($query) use ($studentIds) {
                $query->where('student_id', $studentIds);
            },
        ])
        ->get();

Я хочу использовать идентификатор студента в конечном состоянии, где условие в последнем слое вложенной загрузки, т.е. рутинная_деталь.routine.routine_info.student_marks.

, что-то вроде этого

'routine_detail.routine.routine_info.student_marks' => function ($query) use ($studentIds) {
                $query->where('student_id', $id);
            },

где id будет равен id студента в контексте, из основной модели Student :: .....

...