Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

noblemfd's avatar

WhereIn not working in working in Query Builder

I have this Eloquent Query Builder in Laravel:

    $userCompany                    = Auth::user()->company_id;    
    $userEmployee                   = Auth::user()->employee_id;
    $employeeCode                   = Auth::user()->employee_code;
$employeeemptypeid              = HrEmployee::where('employee_code', $employeeCode)->where('company_id', $userCompany)->pluck('employee_type_id')->first();
    $employeeegendercode            = HrEmployee::where('employee_code', $employeeCode)->where('company_id', $userCompany)->pluck('gender_code')->first(); 


    $leaveBalance = DB::table('hr_leave_types AS lt')
                ->leftJoin('hr_leave_type_details AS ltd', function($join) use ($userCompany)
                    {
                        $join->on('ltd.leave_type_id', '=', 'lt.id')
                        ->where('ltd.company_id', '=', $userCompany)
                        ->whereIn('ltd.leave_applicable_gender', [1, 2]);
                    })
                ->leftJoin('hr_leave_requests AS lr', function($join) use ($userCompany, $userEmployee)
                    {
                        $join->on('lr.leave_type_id', '=', 'lt.id')
                        ->where('lr.company_id', '=', $userCompany)
                        ->where('lr.employee_id', '=', $userEmployee)
                        ->whereYear('lr.commencement_date', '=', date('Y'))
                        ->where('lr.leave_status', 4);
                    })                        
                ->leftJoin('hr_employees AS e', function($join) use ($userCompany, $userEmployee)
                    {
                        $join->on('e.id', '=', 'lr.employee_id')
                        ->where('e.company_id', '=', $userCompany)
                        ->where('e.id', '=', $userEmployee)
                        ->where('e.employee_type_id', '=', 'ltd.employee_type_id');
                    })  
                ->where('lt.company_id', '=', $userCompany)

                ->select(
                        'lt.leave_type_name as leaveCategory',
                        'ltd.no_of_days as applicableLeave',
                        DB::raw("IFNULL(SUM(lr.no_of_days),0) as approvedLeave")

                       )
                  ->groupBy('lt.leave_type_name', 'e.id')
                ->get();  

In hr_leave_type_details table, leave_applicable_gender can be 1 or 2 or 3

1 = Both, 2 = Male, 3 = Female

I want to select Exclude female gender.

So I used:

->whereIn('ltd.leave_applicable_gender', [1, 2])

in the query builder above.

But I see the query is still selecting everything: Both, Male and Female.

How do I correct this?

Thanks

0 likes
2 replies
MichalOravec's avatar
Level 75

Problem is that you use leftJoin, use join instead where you use ->whereIn('ltd.leave_applicable_gender', [1, 2])

Please or to participate in this conversation.