Метод chunk
Метод chunk применяется к запросу Eloquent или Query Builder и позволяет обрабатывать большое количество записей по частям. Первым параметром передаётся размер порции (количество записей в каждой группе), вторым - коллбек-функция, которая будет вызвана для каждой группы записей. Метод автоматически управляет смещением и выполняется до тех пор, пока не будут обработаны все записи.
Синтаксис
<?php
Model::chunk($size, function ($chunk) {
// обработка группы записей
});
?>
Пример
Давайте обработаем все статьи по частям, выводя их заголовки:
<?php
use App\Models\Article;
Article::chunk(100, function ($articles) {
foreach ($articles as $article) {
echo $article->title;
}
});
?>
Результат выполнения кода:
"article 1"
"article 2"
"article 3"
...
Пример
Обновим статус всех статей в порциях по 50 записей:
<?php
use App\Models\Article;
Article::chunk(50, function ($articles) {
foreach ($articles as $article) {
$article->status = 'processed';
$article->save();
}
});
?>
Пример
Используем метод с условиями для обработки только опубликованных статей:
<?php
use App\Models\Article;
$res = Article::where('status', 'published')
->chunk(25, function ($articles) {
foreach ($articles as $article) {
echo $article->title . ' - ' . $article->status;
}
});
?>
Результат выполнения кода:
"article 1 - published"
"article 2 - published"
"article 3 - published"
Пример
Остановим обработку, вернув false из коллбека:
<?php
use App\Models\Article;
Article::chunk(30, function ($articles) {
foreach ($articles as $article) {
if ($article->id > 10) {
return false;
}
echo $article->title;
}
});
?>
Результат выполнения кода:
"article 1"
"article 2"
"article 3"
...