Search code examples
laravelwhere-clausewhere-in

How to Filter Paid or Not Paid Student In laravel


I have just created some payment system for a school and I need to filter my data to Paid or Not Paid category.

$queryBuilder = Student::query()
    ->leftJoin('fee_scheem_maps', 'students.students_id', '=', 'fee_scheem_maps.sfc_student_id')
    ->leftJoin('fee_scheems', 'fee_scheem_maps.sfc_feescheem_id', '=', 'fee_scheems.fee_scheems_id')
    ->leftJoin('individual_fee_scheems', 'fee_scheem_maps.sifc_feescheem_id', '=', 'individual_fee_scheems.ifs_id')
    ->leftJoin('fee_groups', 'fee_scheems.fee_scheems_id', '=', 'fee_groups.fg_fee_scheem_id')
    ->leftJoin('school_fee_collectors', 'students.students_id', '=', 'school_fee_collectors.fc_student_id')
    // ->Where('school_fee_collectors.fc_fee_group_id', $fromDate)
    // ->orWhereNull('school_fee_collectors.fc_fee_group_id', $pstatus)
    // ->orWhereNull('school_fee_collectors.fc_fee_group_id', $fromDate)
    ->when($fromDate, function ($query) use ($fromDate) {
        return $query->where('school_fee_collectors.fc_fee_group_id', $fromDate);
    })
    ->select('*', DB::raw('count(students_id) as total'));

It is working fine with one clause: I need to randomly choose where or notWhere in my case...


Solution

  • $queryBuilder = Student::query()
        ->leftJoin('fee_scheem_maps', 'students.students_id', '=', 'fee_scheem_maps.sfc_student_id')
        ->leftJoin('fee_scheems', 'fee_scheem_maps.sfc_feescheem_id', '=', 'fee_scheems.fee_scheems_id')
        ->leftJoin('individual_fee_scheems', 'fee_scheem_maps.sifc_feescheem_id', '=', 'individual_fee_scheems.ifs_id')
        ->leftJoin('fee_groups', 'fee_scheems.fee_scheems_id', '=', 'fee_groups.fg_fee_scheem_id')
        ->leftJoin('school_fee_collectors', 'students.students_id', '=', 'school_fee_collectors.fc_student_id')
        ->when($fromDate, function ($query) use ($fromDate) {
            return $query->where('school_fee_collectors.fc_fee_group_id', $fromDate);
        })
    
    ->where(function($query) use ($request){
        if($request->paid_status){
           $query->where('table_name.columName',$request->paid_status)
        }
    })->select('*', DB::raw('count(students_id) as total'));
    

    you can use where like this , when your $request->paid_status is null means have no filter about paid not paid thats time query is return everything but when is have filter thats time only this where is working

    ->where(function($query) use ($request){
        if($request->paid_status){
           $query->where('table_name.columName',$request->paid_status)
        }
    })