我在laravel的控制器中有这个SQL查询
$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之前首先工作的SQL查询
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语法中有错误;查看与您的MariaDB服务器版本对应的手册,以获得在''附近使用的正确语法。在第1行(SQL:选择计数(*)为grad_count,
student_course
,MONTH(student_date_ended
)来自student
,其中student_course
=基本计算机和年份({{1} })= 2015年按月组(student_date_ended
)
我在这里做错了什么,我不知道?
答案 0 :(得分: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设计模式。
答案 1 :(得分: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();