model->with('roles'); if (!empty($data['search'])) { $search = $data['search']; $query->where(function ($q) use ($search) { $q->where('fullname', 'like', "%{$search}%") ->orWhere('username', 'like', "%{$search}%") ->orWhere('email', 'like', "%{$search}%"); }); } if (!empty($data['role'])) { $query->whereHas('roles', fn($q) => $q->whereIn('name', (array) $data['role'])); } if (isset($data['status']) && $data['status'] !== []) { $query->whereIn('status', (array) $data['status']); } $perPage = $data['per_page'] ?? 15; return $query->orderBy('id', 'desc')->paginate($perPage); } }