Level 75
Problem is that you use leftJoin, use join instead where you use ->whereIn('ltd.leave_applicable_gender', [1, 2])
Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.
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
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.