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

Метод cursor

Метод cursor применяется к запросу Eloquent или Query Builder и возвращает генератор, который позволяет итерировать по результатам запроса по одному ряду за раз. Это значительно снижает потребление памяти по сравнению с методами get или all, которые загружают все результаты в память одновременно. Метод особенно полезен при работе с большими таблицами, содержащими сотни тысяч или миллионы записей.

Синтаксис

<?php Model::cursor(); ?>

Пример

Давайте получим все статьи с помощью курсора и обработаем их по одной:

<?php namespace AppHttpControllers; use AppModelsArticle; class ArticleController extends Controller { public function index() { $res = Article::cursor(); foreach ($res as $article) { echo $article->title; } } } ?>

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

"article 1" "article 2" "article 3" "article 4" "article 5"

Как видите, мы можем перебирать записи в цикле foreach, при этом каждая запись загружается в память только во время текущей итерации.

Пример

Давайте используем курсор для обновления всех статей с определённым условием:

<?php namespace AppHttpControllers; use AppModelsArticle; class ArticleController extends Controller { public function updateAll() { $res = Article::where('status', 'draft')->cursor(); foreach ($res as $article) { $article->status = 'published'; $article->save(); echo $article->title . ' updated'; } } } ?>

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

"draft article 1 updated" "draft article 2 updated" "draft article 3 updated"

Пример

Давайте обработаем данные с использованием агрегатных функций и условий:

<?php namespace AppHttpControllers; use AppModelsArticle; class ArticleController extends Controller { public function processArticles() { $res = Article::where('views', '>', 100)->orderBy('views', 'desc')->cursor(); foreach ($res as $article) { echo $article->title . ': ' . $article->views . ' views'; } } } ?>

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

"article 1: 1000 views" "article 2: 500 views" "article 3: 200 views"

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

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