$items = collect(range(1, 100));
// Пропустити 20, взяти 10
$page = $items->skip(20)->take(10);
// [21, 22, ..., 30]
// Пагінація вручну
$perPage = 10;
$page = 3;
$results = $items->skip(($page - 1) * $perPage)
->take($perPage);
// Коротко: forPage()
$results = $items->forPage(3, 10);
// Умовні варіанти замість числа
$items->skipUntil(fn($i) => $i > 50);
$items->skipWhile(fn($i) => $i < 20);
$items->takeUntil(fn($i) => $i > 50);
$items->takeWhile(fn($i) => $i < 20);
// API-пагінація на закешованих даних
public function index(Request $request)
{
$all = Cache::remember(
'products', 3600, fn () => Product::all()
);
$page = (int) $request->query('page', 1);
$perPage = (int) $request->query('per_page', 15);
return response()->json([
'data' => $all->forPage($page, $perPage)->values(),
'current_page' => $page,
'per_page' => $perPage,
'total' => $all->count(),
]);
}