根据另一个 eloquent 查询的结果循环运行 eloquent 并在刀片中显示列表

问题描述

我有一个获取学生列表的查询,我使用 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中只出现一个学生,但我需要显示所有学生查询中的学生列表。

解决方法

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

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

然后您将获得所有学生的平均成绩,并可以在您的视图中循环查看。

,

你应该这样做

// Create an array to store the value
$student_average = [];

foreach ($students as $student) {
    // Push result to array
    $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 "));
}