运行 eloquent 循环并根据另一个 eloquent 查询的结果在 blade 中显示列表
Running eloquent in loop and display list in blade based on result from another eloquent query
我有一个获取学生列表的查询,我正在使用 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 "));
}
我有一个获取学生列表的查询,我正在使用 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 "));
}