提问者:小点点

在循环中运行Elecoquent,并基于另一个Elecoquent查询的结果在blade中显示列表


我有一个查询来获取学生列表,我正在使用foreach循环来迭代并获取每个学生的student_id。

在foreach循环中,我有另一个计算学生分数的查询。在计算学生分数时,我需要来自第一个查询的student_id

逻辑

$students = DB::table('grades_students')
  ->join('users', 'grades_students.student_id', '=', 'users.id')
  ->join('grades', 'grades_students.grade_id', '=', 'grades.id')
  ->where('grades.stream_id', $request->stream_name)
  ->get()->pluck('student_id');


  foreach ($students as $student ) {

    $student_average=DB::select(DB::raw("select student_id,  round((SUM(t.mark))/'5') average_mark from (
        select marks.student_id,  ROUND(AVG(mark)) as mark  from marks
            INNER JOIN teaching_loads ON teaching_loads.id=marks.teaching_load_id
            INNER JOIN subjects ON subjects.id=teaching_loads.subject_id
        where marks.student_id = '$student' AND marks.assessement_id=1  
        GROUP BY subject_id
      )t "));

}
return view('analytics.view-test', compact('student_average'));   



现在的问题是,在blade中只出现了一个学生,而我需要显示一个在学生查询中的所有学生的列表。


共1个答案

匿名用户

您将覆盖$student_avere每个循环,因此只有最后一个循环的内容存储在$student_avere中。您需要改用数组。

$student_averages = [];
foreach ($students as $student) {
    $student_averages[] = DB::select(...your query);
}
return view('analytics.view-test', compact('student_averages'));

然后,您将有所有的学生平均可用,并可以循环通过他们在您的视图。