2017-02-25 143 views
2

我在laravel在我的控制器这个SQL查询Laravel SQL查询一直给SQLSTATE [42000]:语法错误或访问冲突: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(); 

这是基于这个SQL查询我做之前先工作将其转换为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语法错误; (SQL:select count(*)as grad_count,student_course,MONTH(student_date_ended)from student其中student_course =基本计算机和年(student_date_ended)检查对应于您的MariaDB服务器版本的手册, )= 2015 GROUP BY MONTH(student_date_ended

难道我做错了什么在这里,我不知道的

回答

1

作为替代方案,在我所有的项目中,我使用DB相互作用的下列方式?

$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,而无需担心转换后的调用不工作。

注意:不要在控制器中保留你的数据库调用,我会让他们到一个模型文件夹。这样你将保持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]); 

这似乎问题的一部分是我还需要通过所以我试图将它添加到我原来的Laravel码组中加入“student_course”列,并设法得到它一起工作这种方式。

$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(); 
相关问题