has('perPage') ? $request->input('perPage') : 10; return Member::query() ->joinCorporateEmployees('left') ->joinCorporateDivisions('left') ->with('currentPlan') ->withSum('claims', 'total_claim') ->whereHas('employeds', function (Builder $corporateEmployee) use ($corporateId) { $corporateEmployee->where('corporate_id', $corporateId); }) ->when($request->input('search'), function (Builder $query, $search) { $query->where('member_id', 'like', "%" . $search . "%") ->orWhere('name', 'like', "%" . $search . "%"); }) ->when($request->input('division'), function (Builder $division, $division_id) { $division->whereHas('division', function ($corporateEmployee) use ($division_id) { $corporateEmployee->where('division_id', $division_id); }); }) ->when($request->has('orderBy'), function (Builder $query) use ($request) { $orderBy = match ($request->orderBy) { 'memberId' => 'member_id', 'fullName' => 'name', 'status' => 'active', default => '' }; if (in_array($orderBy, ['member_id', 'name', 'active'])) { $query->getQuery()->orderBy($orderBy, $request->order); } elseif ($request->orderBy === 'division') { $query->getQuery()->orderBy('corporate_divisions.name', $request->order); } }) ->select(['members.id', 'members.person_id', 'members.member_id', 'members.name', 'members.name_prefix', 'members.name_suffix', 'corporate_divisions.name AS division_name', 'members.active']) ->paginate($limit); } }