Level 102
You can use when in the query builder
->when($something, function ($query, $something) {
$query->where('foo', $something)
})->where(...
Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.
I have this query build I used to generate leave balance:
$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);
})
->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();
This gives me the result:
LeaveCategory | applicableLeave | approvedLeave
But I want to add a condition to the applicableLeave
$leaveprorates = HrLeaveTypeDetail::select('is_prorate')->where('leave_type_id', $leavetypeid)->where('employee_type_id', $employeeemptypeid)->get();
foreach( leaveprorates as leaveprorate)
if ($leaveprorate == 1)
{
if ($diff_in_months < 12)
{
$applicableLeave = intval($authorizedleavedaysx * $diff_in_months / 12);
}else{
$applicableLeave = HrLeaveTypeDetail::where('leave_type_id', $leaveType)->where('employee_type_id',$employeeemptypeid)->pluck('no_of_days')->first();
}
}else{
$applicableLeave = HrLeaveTypeDetail::where('leave_type_id', $leaveType)->where('employee_type_id',$employeeemptypeid)->pluck('no_of_days')->first();
}
How do I add this condition for applicableLeave in the query?
Thanks
Please or to participate in this conversation.