---
title: "cursor() - потокове передавання великих наборів даних"
url: https://laravelukraine.com/blog/cursor-potokove-peredavannia-velikix-naboriv-danix
date: 2026-04-04
---

# cursor() - потокове передавання великих наборів даних

При експорті 100,000 користувачів. `get()` завантажує все в пам'ять. Сервер падає.

`cursor()` передає результати один за одним. Константне використання пам'яті.

**Як це працює:**

Використовує MySQL cursor. Отримує один запис за раз. Пам'ять залишається низькою.

**Коли використовувати:**

- Експорт великих наборів даних
- Обробка величезних таблиць
- Середовища з обмеженою пам'яттю

**Компроміс:**

Тримає з'єднання з базою даних відкритим довше. Не для веб-запитів, ідеально для команд.

Порада: Використовувати в консольних командах та jobs, уникай в HTTP контролерах.

```php
// ПОГАНО: Завантажує 100k записів в пам'ять
$users = User::all(); // Може впасти
foreach ($users as $user) {
    $this->export($user);
}

// ДОБРЕ: Потокове передавання один за одним
foreach (User::cursor() as $user) {
    $this->export($user); // Константна пам'ять
}

// В консольній команді
public function handle()
{
    $this->output->progressStart(User::count());

    foreach (User::cursor() as $user) {
        $this->processUser($user);
        $this->output->progressAdvance();
    }

    $this->output->progressFinish();
}

// З умовами
foreach (User::where('active', true)->cursor() as $user) {
    // Обробляти тільки активних користувачів
}
```
