Метод pipe
Метод pipe применяется к коллекции и принимает
замыкание, в которое передаётся вся коллекция. Внутри
замыкания можно выполнять любые операции с коллекцией,
а затем вернуть результат этих операций. Метод полезен
для создания цепочек преобразований, когда нужно выполнить
сложную логику, не разрывая цепочку вызовов.
Синтаксис
<?php
$collection->pipe(callable $callback);
?>
Пример
Давайте используем метод pipe для фильтрации
коллекции с дополнительной проверкой:
<?php
use Illuminate\Support\Collection;
$collection = collect([1, 2, 3, 4, 5, 6]);
$res = $collection->pipe(function (Collection $coll) {
$filtered = $coll->filter(fn($item) => $item % 2 === 0);
if ($filtered->count() > 2) {
return $filtered->values();
}
return collect(['Недостаточно чётных чисел']);
});
echo $res;
?>
Результат выполнения кода:
"[2,4,6]"
Пример
Давайте используем метод pipe для преобразования
коллекции в строку с пользовательской логикой:
<?php
use Illuminate\Support\Collection;
$users = collect([
['name' => 'John', 'age' => 25],
['name' => 'Jane', 'age' => 30],
['name' => 'Bob', 'age' => 35],
]);
$res = $users->pipe(function (Collection $coll) {
$names = $coll->pluck('name');
return 'Пользователи: ' . implode(', ', $names->toArray());
});
echo $res;
?>
Результат выполнения кода:
"Пользователи: John, Jane, Bob"
Пример
Давайте используем метод pipe для выполнения
условной логики с коллекцией:
<?php
use Illuminate\Support\Collection;
$data = collect([
['id' => 1, 'status' => 'active'],
['id' => 2, 'status' => 'inactive'],
['id' => 3, 'status' => 'active'],
]);
$res = $data->pipe(function (Collection $coll) {
$active = $coll->where('status', 'active');
if ($active->isEmpty()) {
return 'Нет активных записей';
}
return $active->map(function ($item) {
return 'ID: ' . $item['id'];
})->implode(', ');
});
echo $res;
?>
Результат выполнения кода:
"ID: 1, ID: 3"