Блог
Кар'єра
Вакансії Компанії
Навчання
Співбесіди Тестування Відео
Екосистема
Пакети Ресурси
Інше
Події Про нас

Блог

Статті, новини, туторіали та переклади від учасників спільноти

Написати статтю
Увійдіть, щоб продовжити
No results.
Tips 04 квітня 2026

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

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

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

Як це працює:

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

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

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

Компроміс:

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

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

// ПОГАНО: Завантажує 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) {
    // Обробляти тільки активних користувачів
}
Tips 06 березня 2026

value() vs first() - економія пам'яті

Потрібна тільки одна колонка з одного рядка? Не треба завантажувати всю модель.

first() створює повну Eloquent модель. value() повертає тільки дані.

Різниця:

  • first() повертає екземпляр моделі з усіма атрибутами
  • value() повертає одне скалярне значення
  • pluck() повертає колекцію значень з кількох рядків

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

Використовувати value() для однієї колонки, одного рядка. Використовувати pluck() для однієї колонки, кількох рядків. Використовувати first() тільки коли потрібні методи моделі.

Порада: На великих таблицях з багатьма колонками value() значно швидший.

// ПОГАНО: Завантажує повну модель з усіма колонками
$email = User::where('id', 1)->first()->email;

// ДОБРЕ: Повертає тільки рядок email
$email = User::where('id', 1)->value('email');

// Декілька рядків, одна колонка
$emails = User::where('active', true)->pluck('email');
// Повертає: Collection ['john@ex.com', 'jane@ex.com']

// Потрібні декілька колонок з кількох рядків?
$users = User::select('id', 'email')->get();

// З ключем за ID
$emails = User::pluck('email', 'id');
// Повертає: [1 => 'john@ex.com', 2 => 'jane@ex.com']