РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
233 of 1392 menu

Метод chunk

Метод chunk применяется к запросу Eloquent или Query Builder и позволяет обрабатывать большие наборы данных по частям. Первым параметром передаётся количество записей в одном блоке, вторым - функция-замыкание, которая будет вызвана для каждого блока. Метод автоматически выполняет запросы с смещением, пока не будут обработаны все записи.

Синтаксис

<?php Model::chunk($count, function ($chunk) { // Обработка блока записей }); ?>

Пример

Давайте обработаем все статьи из базы данных по 100 записей за раз:

<?php namespace AppHttpControllers; use AppModelsArticle; class ArticleController extends Controller { public function index() { $res = []; Article::chunk(100, function ($articles) use (&$res) { foreach ($articles as $article) { $res[] = $article->title; } }); return $res; } } ?>

Результат выполнения кода:

["article 1", "article 2", "article 3", ...]

Пример

Используем метод chunk для массового обновления записей:

<?php namespace AppHttpControllers; use AppModelsArticle; class ArticleController extends Controller { public function updateAll() { $res = []; Article::chunk(50, function ($articles) use (&$res) { foreach ($articles as $article) { $article->update(['status' => 'processed']); $res[] = $article->id; } }); return $res; } } ?>

Результат выполнения кода:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...]

Пример

Обработка записей с дополнительной фильтрацией перед разбиением на блоки:

<?php namespace AppHttpControllers; use AppModelsArticle; class ArticleController extends Controller { public function filterChunk() { $res = []; Article::where('status', 'pending') ->chunk(30, function ($articles) use (&$res) { foreach ($articles as $article) { $res[] = $article->title . ' (processed)'; $article->status = 'processed'; $article->save(); } }); return $res; } } ?>

Результат выполнения кода:

["pending article 1 (processed)", "pending article 2 (processed)", ...]

Смотрите также

  • метод chunkById,
    который разбивает записи по идентификатору
  • метод lazy,
    который возвращает ленивую коллекцию для обработки
  • метод cursor,
    который возвращает курсор для итерации по записям
  • метод get,
    который выполняет запрос и возвращает коллекцию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить