chunk() - поділ даних на частини
Потрібно обробити 10 000 елементів? Або API обмежує 100 запитів за хвилину?
chunk() розбиває колекцію на менші групи.
Сценарії:
- Обмеження API
- Пакетна обробка
- Керування пам'яттю
- Прогрес-бар
Відмінність від query chunk():
Collection chunk() працює з уже завантаженими даними. Query chunk() завантажує дані з бази порціями.
Порада: поєднувати з sleep() для API rate limit.
// Поділ на частини по 100
$users = User::all();
$users->chunk(100)->each(function ($batch) {
$this->sendBatchEmail($batch);
});
// API rate limit
$products = collect($apiProducts);
$products->chunk(50)->each(function ($batch) {
$this->syncToDatabase($batch);
sleep(1);
});
// Прогрес
$done = 0;
$users->chunk(100)->each(function ($batch) use (&$done) {
$batch->each(fn($u) => $this->process($u));
$done += $batch->count();
echo "Progress: {$done}\n";
});
// Комбінування з іншими методами
$users->chunk(100)->map(function ($chunk) {
return $chunk->pluck('email');
});