Метод lazy
Метод lazy применяется к запросу Eloquent и возвращает экземпляр класса LazyCollection, который позволяет итерироваться по результатам запроса без загрузки всех записей в память одновременно. Это особенно полезно при работе с большими наборами данных, например, при экспорте или пакетной обработке. Метод не принимает параметров.
Синтаксис
<?php
Model::lazy();
?>
Пример
Получим все записи из таблицы статей и обработаем их по одной, выводя заголовки:
<?php
namespace App\Http\Controllers;
use App\Models\Article;
class ArticleController extends Controller
{
public function index()
{
$articles = Article::lazy();
foreach ($articles as $article) {
echo $article->title;
}
}
}
?>
Результат выполнения кода:
"article 1"
"article 2"
"article 3"
Пример
Обработаем записи с условием, выводя только те, у которых поле 'status' равно 'published':
<?php
namespace App\Http\Controllers;
use App\Models\Article;
class ArticleController extends Controller
{
public function index()
{
$articles = Article::where('status', 'published')->lazy();
foreach ($articles as $article) {
echo $article->title;
}
}
}
?>
Результат выполнения кода:
"article 2"
"article 4"
Пример
Выполним обновление всех записей, не перегружая память:
<?php
namespace App\Http\Controllers;
use App\Models\Article;
class ArticleController extends Controller
{
public function updateAll()
{
$articles = Article::lazy();
foreach ($articles as $article) {
$article->views = $article->views + 1;
$article->save();
}
echo "All articles updated";
}
}
?>
Результат выполнения кода:
"All articles updated"