簡體   English   中英

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

[英]how to use GroupBy and Where Clause in Laravel Eloquent?

請嘗試使用 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`)

實際上,我從代碼中了解到,您需要按學年對結果進行分組,然后將其加入學生表。 所以我會建議

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 model 來構建此查詢,這將使您的代碼更清晰。 我還建議使用 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,
    ]);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM