2017-02-25 16 views
2

は、このSQLクエリに基づいているLaravel SQLクエリは、SQLSTATE [42000]を与えるキープ:構文エラーまたはアクセス違反:私はlaravelで私のコントローラで、このSQLクエリを持っている1064

$distinct_course = DB::table('student') 
    ->select(DB::raw('count(*) as grad_count, `student_course`, MONTH(`student_date_ended`)')) 
    ->where('student_course', '=', 'Basic Computer') 
    ->whereYear('student_date_ended', '=', '2015') 
    ->groupby(DB::raw('MONTH(`student_date_ended`')) 
    ->get(); 

は私が前に最初に動作するように作られましたそれをLaravelに変換する

select count(*) as grad_count, `student_course`, MONTH(`student_date_ended`) from `student` where `student_course` = "Basic Computer" and year(`student_date_ended`) = 2015 group by MONTH(`student_date_ended`) 

しかし、私はいつもこのエラーが発生します。

SQLSTATE [42000]:構文エラーまたはアクセス違反:1064 SQL構文にエラーがあります。、月(student_date_ended)からstudentまで、student_course =基本コンピュータと年(student_date_ended)から1行目(SQL:select count(*)をgrad_countとして選択するための正しい構文についてはMariaDBサーバーのバージョンに対応するマニュアルを参照してください。月別)= 2015グループ(student_date_ended

私はDBの相互作用の以下の方法を使用するすべての私のプロジェクトでは、私が代わりに

答えて

1

を認識していないだと、ここで何か間違ったことをやっていますか?:

$Query = 'select count(*) as grad_count, `student_course`, 
    MONTH(`student_date_ended`) 
    from `student` 
    where `student_course` = ? 
    and year(`student_date_ended`) = ? 
    group by MONTH(`student_date_ended`)'; 

$GradStudents = DB::select($Query, [ $StudenCourse, $StudentDateEnded]); 

このようにして、私は確認済みのMySQLのステートメントからLaravelへ、変換後に動作しないコールを心配する必要がなくなります。

注:dbコールをコントローラに保存する代わりに、モデルフォルダを使用します。この方法で、MVCデザインパターンを維持します。

+0

ありがとうございます!私はまだLaravelに慣れていますので、私は自分のプロジェクトでモデルを使う方法を学ばなければなりません。 – AminoAcid

0

Paulの助けを借りて、私はこのコードで作業することができました。

$Query = 'select count(*) as grad_count, `student_course`, 
       MONTH(`student_date_ended`) as Month 
       from `student` 
       where `student_course` = ? 
       and year(`student_date_ended`) = ? 
       group by MONTH(`student_date_ended`), student_course'; 

    $StudentCourse = 'Basic Computer'; 
    $StudentDateEnded = 2015; 

    $distinct_course = DB::select($Query, [ $StudentCourse, $StudentDateEnded]); 

問題の一部は、私もにより、グループ内の「student_course」列を追加するために必要なので、私は私の元Laravelコードに追加してみましたし、また、それが仕事を得るために管理だったようであろうこのように。

$distinct_course = DB::table('student') 
    ->where('student_course', '=', 'Basic Computer') 
    ->whereYear('student_date_ended', '=', '2015') 
    ->select(DB::raw('count(*) as grad_count, `student_course`, MONTH(`student_date_ended`) as Month')) 
    ->groupby(DB::raw('MONTH(`student_date_ended`), student_course')) 
    ->get(); 
関連する問題