首页 > 解决方案 > Laravel 查询生成器不工作,显示错误

问题描述

我在 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:select 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 admission_status ="Absent " then 1 end) as total_absent,count(case when admission_status="Present" then 1 end) as total_present,count(case when admission_status="Leave" then 1 end) as total_leave,count(distinct date) as total_class from tbl_student_attendanceinner join tbl_student_admissionon 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_admissionstudent_id)

知道我在做什么错吗?

标签: phpmysqlsqllaravel

解决方案


使用 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(...);


推荐阅读