猿问

如何在 Laravel Eloquent 中使用 GroupBy 和 Where 子句?

请尝试使用 Laravel 中的 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`)


炎炎设计
浏览 117回答 2
2回答

翻阅古今

实际上,我从代码中了解到,您需要按学年对结果进行分组,然后将其加入到学生表中。所以我建议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();像这样的东西。

DIEA

要建立在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,    ]);}
随时随地看视频慕课网APP
我要回答