Оптимизация работы с большими данными в Laravel с помощью Lazy Collections
Lazy Collections и PHP-генераторы - это спасение от перегрузки памяти. В Laravel 11 Lazy Collections стали ещё мощнее благодаря улучшенной интеграции с Eloquent и поддержке асинхронных операций. Это идеально для обработки больших CSV-файлов, импорта данных или работы с огромными наборами записей.
Пример обработки CSV-файла с минимальным потреблением памяти:
use Illuminate\Support\LazyCollection;
use App\Models\User;
LazyCollection::make(function () {
$handle = fopen('large_data.csv', 'r');
while (($row = fgetcsv($handle)) !== false) {
yield $row; // Генератор возвращает строки по одной
}
fclose($handle);
})->chunk(1000)->each(function ($rows) {
// Пакетная вставка в БД
User::insert(
$rows->map(fn($row) => [
'name' => $row[0],
'email' => $row[1],
'created_at' => now(),
'updated_at' => now(),
])->toArray()
);
});
👉@web_craft | #laravel