public function getQuestions(Request $request) { $messages = [ '*.bank_id.required' => 'Please Select Question Bank.', ]; $data = $request->validate([ '*.bank_id' => 'required', '*.format' => 'nullable', '*.topic' => 'nullable', ], $messages); $quizzes = collect(); foreach ($data as $item) { $bank = QuestionBank::with([ 'quizzes' => function ($q) use ($item) { $q->select([ 'quizzes.id','quizzes.title','quizzes.difficulty', 'quizzes.type','quizzes.question_type', 'quizzes.parent_id','quizables.quizable_id' ]) ->with(['quizzes' => function ($subQ) { $subQ->select([ 'quizzes.id','quizzes.title','quizzes.difficulty', 'quizzes.type','quizzes.question_type','quizzes.parent_id' ]); }]) ->when($item['format'], fn($query) => $query->where('quizzes.type', $item['format'])) ->when($item['topic'], fn($query) => $query->where('quizzes.question_type', $item['topic'])); } ])->find($item['bank_id']); if ($bank) { $quizzes = $quizzes->merge($bank->quizzes); } } return response()->json($quizzes); }