如何使用 GroupBy 和 Where Clause in Laravel Eloquent?



请尝试使用拉拉维尔中的 GroupBy 和 Where 子句从数据库中的连接表中检索数据。 如果我添加groupBy,我会收到错误. 它可以在没有 GroupBy 的情况下工作,但我想在检索后对数据进行排序。

这就是我所拥有的,有人应该帮助我

public function showResult($std_id)
{
$results = DB::table('students')
->select('*')
->join('results', 'students.std_id', 'results.student_results_id')
->where('student_results_id', $std_id)
->groupBy('results.academic_year')
->get();
$studentprofilePage = Student::find($std_id);
if (empty($studentprofilePage)) {
return redirect('/user');
}
return view('resultsdisplay', [
'results' => $results,
'studentresultsprofile' => $studentprofilePage,
]);
}

我收到此错误

Syntax error or access violation: 1055 'smgt.students.std_id' isn't in GROUP BY (SQL: select * from `students` inner join `results` on `students`.`std_id` = `results`.`student_results_id` where `student_results_id` = 4662416 group by `results`.`academic_year`)

实际上,我从代码中了解到,您需要按学年对结果进行分组,然后将其加入学生表。 所以我会建议

DB::table('students')
->select('*')
->join('results', function ($join) {
$join->on('students.std_id', '=', 'results.student_results_id')->groupBy('results.academic_year'); 
})
->where('student_results_id', $std_id)
->get();

像这样的东西。

若要基于mohammad.kaab答案进行构建,您应该能够使用Student模型来构建此查询,从而使您的代码更简洁。我还建议使用Laravel的类型提示,showResult(Student $student),Laravel将在后台为您获取Student,如果未找到学生,则返回404。

因此,您应该能够执行类似于以下内容的操作:

public function showResult(Student $student)
{
$results = $student->results()
->groupBy('results.academic_year');  
->get(); 
return view('resultsdisplay', [
'results' => $results,
'studentresultsprofile' => $student,
]);
}

最新更新