【问题标题】:Laravel Query Builder not working, Show errorLaravel 查询生成器不工作,显示错误
【发布时间】:2019-02-14 01:18:55
【问题描述】:

我在 Laravel 框架中使用了以下查询

$student_attendance_search_result = DB::table('tbl_student_attendance')
        ->join('tbl_student_admission', 'tbl_student_attendance.student_id', '=', 'tbl_student_admission.student_id')
        ->select(DB::raw('tbl_student_attendance.*,tbl_student_admission.student_id,tbl_student_admission.student_full_name_english,tbl_student_admission.class,tbl_student_admission.section,tbl_student_admission.roll_no, count(case when attendance_status ="Absent"  then 1 end) as total_absent,count(case when attendance_status ="Present" then 1 end) as total_present,count(case when attendance_status ="Leave" then 1 end) as total_leave,count(distinct date) as total_class'))
        ->where('tbl_student_attendance.academic_year', $academic_year)
        ->where('tbl_student_admission.class', $classs)
        ->where('tbl_student_admission.section', $section)
        ->where('tbl_student_attendance.month', $month)
        ->groupBy('tbl_student_admission.student_id')
        ->get();

当我尝试运行它时抛出以下异常

SQLSTATE[42000]:语法错误或访问冲突:1055 'db_smsfinal1user.tbl_student_attendance.student_attendance_id' 不是 在 GROUP BY (SQL: 选择 tbl_student_attendance.*, tbl_student_admission.student_id, tbl_student_admission.student_full_name_english, tbl_student_admission.class, tbl_student_admission.section, tbl_student_admission.roll_no,计数(当出席状态时的情况 ="缺席" 然后 1 结束) 作为 total_absent,count(case 当出席状态 = "Present" 然后 1 结束) 作为 total_present,count(case 当出席状态=“离开”然后1结束)为 total_leave,count(distinct date) as total_class from tbl_student_attendance 内连接 tbl_student_admission on tbl_student_attendance.student_id = tbl_student_admission.student_id 在哪里 tbl_student_attendance.academic_year = 2018 和 tbl_student_admission.class = 2 和 tbl_student_admission.section = 无和 tbl_student_attendance.month = 九月分组 tbl_student_admission.student_id)

知道我做错了什么吗?

【问题讨论】:

  • 这个语法是SQL的标准,我想不需要转换吧?
  • 在 laravel 中它不起作用

标签: php mysql sql laravel


【解决方案1】:

使用 DB::raw 作为选择参数

DB::select( DB::raw('student_id,count(case when attendance_status ='Absent' then 1 end) as absent_count,count(case when attendance_status ='Present' then 1 end) as present_count,count(case when attendance_status ='Leave' then 1 end) as leave_count,count(distinct date) as Tot_count') )->from(..)->groupBy(...);

【讨论】:

    猜你喜欢
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 2018-08-08
    • 2018-08-03
    • 2016-12-31
    • 2016-12-08
    相关资源
    最近更新 更多