Метод each
Метод each применяется к коллекции или результату запроса Eloquent
и позволяет обработать каждую запись отдельно. Метод принимает замыкание,
в которое передаётся текущий элемент коллекции и ключ. Возвращает метод
исходную коллекцию. Если внутри замыкания вернуть false,
то итерация прервётся досрочно.
Синтаксис
<?php
Model::each($callback);
?>
Пример
Давайте обработаем все записи модели Article и выведем заголовки:
<?php
namespace AppHttpControllers;
use AppModelsArticle;
class ArticleController extends Controller
{
public function index()
{
$articles = Article::all()->each(function ($article) {
echo $article->title . "\n";
});
}
}
?>
Результат выполнения кода:
"article 1"
"article 2"
"article 3"
Пример
Давайте обработаем записи и используем ключ элемента:
<?php
use AppModelsArticle;
$articles = Article::where('status', 'published')->get();
$articles->each(function ($article, $key) {
echo "Key: {$key}, Title: {$article->title}\n";
});
?>
Результат выполнения кода:
"Key: 0, Title: article 1"
"Key: 1, Title: article 2"
"Key: 2, Title: article 3"
Пример
Давайте прервём итерацию после определённого элемента:
<?php
use AppModelsArticle;
$articles = Article::all();
$res = $articles->each(function ($article, $key) {
echo $article->title . "\n";
if ($key === 1) {
return false;
}
});
?>
Результат выполнения кода:
"article 1"
"article 2"
Пример
Давайте изменим значения элементов внутри итерации:
<?php
use AppModelsArticle;
$articles = Article::all();
$articles->each(function ($article, $key) {
$article->title = 'New title';
$article->save();
});
foreach ($articles as $article) {
echo $article->title . "\n";
}
?>
Результат выполнения кода:
"New title"
"New title"
"New title"
Пример
Давайте используем метод each для обработки большого количества записей
с разбивкой на части с помощью chunk:
<?php
use AppModelsArticle;
Article::chunk(100, function ($chunk) {
$chunk->each(function ($article) {
echo $article->title . "\n";
});
});
?>
Результат выполнения кода:
"article 1"
"article 2"
"article 3"