---
title: "Lazy Collections з альтернативою cursor()"
url: https://laravelukraine.com/blog/lazy-collections-z-alternativoiu-cursor
date: 2026-06-30
---

# Lazy Collections з альтернативою cursor()

`cursor()` тримає з'єднання з БД відкритим. Ризиковано для довгих операцій.

`lazy()` використовує chunks внутрішньо. Безпечніше.

**Як працює lazy():**

Завантажує дані пакетами (типово 1000).
Видає елементи один за одним.
Закриває з'єднання між пакетами.

**Продуктивність:**

Ефективна пам'ять як cursor().
Безпека з'єднання як chunk().
Найкраще з обох світів.

Порада: Налаштуй розмір chunk з `lazy(500)` для точного налаштування.

```php
// Ризиковано: З'єднання залишається відкритим
User::cursor()->each(function ($user) {
    // Довга обробка тут може таймаутнути
    $this->sendEmail($user);
});

// Краще: Chunks з lazy ітерацією
User::lazy()->each(function ($user) {
    // Безпечніше для довгих операцій
    $this->sendEmail($user);
});

// Власний розмір chunk
User::lazy(200)->each(function ($user) {
    $this->processUser($user);
});

// Працює з фільтрами
User::where('active', true)
    ->orderBy('created_at')
    ->lazy()
    ->filter(fn($user) => $user->hasOrders())
    ->each(fn($user) => $this->sendPromo($user));
```
