Класс Collection
Класс Collection является одним из ключевых компонентов Laravel,
предназначенным для работы с массивами данных. Он предоставляет
богатый набор методов для фильтрации, преобразования, сортировки
и агрегации элементов. Коллекции особенно полезны при работе
с результатами запросов Eloquent, так как все методы возвращают
новые экземпляры коллекций, что позволяет строить цепочки вызовов.
Класс реализует интерфейсы ArrayAccess, Countable и
IteratorAggregate, что делает его очень гибким в использовании.
Создание коллекции
Существует несколько способов создания коллекции. Самый простой -
использовать глобальную функцию collect, которая принимает
массив и возвращает экземпляр класса Collection. Также можно
использовать статический метод make или создать коллекцию
из результата запроса к базе данных.
<?php
use Illuminate\Support\Collection;
use App\Models\User;
// Creating a collection using the collect function
$coll1 = collect(['a', 'b', 'c', 'd', 'e']);
// Creating a collection using the static make method
$coll2 = Collection::make([1, 2, 3, 4, 5]);
// Creating a collection from a query result
$coll3 = User::where('active', 1)->get();
echo $coll1->count();
echo "\n" . $coll2->count();
echo "\n" . $coll3->count();
?>
Результат выполнения кода:
"5
5
3"
Метод all - получение всех элементов
Метод all возвращает все элементы коллекции в виде обычного
массива PHP. Это полезно, когда нужно работать с данными вне
контекста коллекции.
<?php
use Illuminate\Support\Collection;
$coll = collect(['a', 'b', 'c', 'd', 'e']);
$res = $coll->all();
print_r($res);
?>
Результат выполнения кода:
"Array ( [0] => a [1] => b [2] => c [3] => d [4] => e )"
Метод count - подсчёт элементов
Метод count возвращает общее количество элементов в коллекции.
Этот метод также доступен через интерфейс Countable.
<?php
use Illuminate\Support\Collection;
$coll = collect(['a', 'b', 'c', 'd', 'e']);
$res = $coll->count();
echo $res;
?>
Результат выполнения кода:
"5"
Метод isEmpty - проверка на пустоту
Метод isEmpty проверяет, пуста ли коллекция. Возвращает
true, если коллекция не содержит элементов, и false
в противном случае. Существует также обратный метод
isNotEmpty.
<?php
use Illuminate\Support\Collection;
$coll1 = collect(['a', 'b', 'c', 'd', 'e']);
$coll2 = collect([]);
$res1 = $coll1->isEmpty();
$res2 = $coll2->isEmpty();
echo "First collection is empty: " . ($res1 ? 'true' : 'false');
echo "\nSecond collection is empty: " . ($res2 ? 'true' : 'false');
?>
Результат выполнения кода:
"First collection is empty: false
Second collection is empty: true"
Метод toArray - преобразование в массив
Метод toArray преобразует коллекцию в обычный массив PHP.
Если коллекция содержит модели Eloquent, они также будут
преобразованы в массивы.
<?php
use Illuminate\Support\Collection;
$coll = collect(['a', 'b', 'c', 'd', 'e']);
$res = $coll->toArray();
print_r($res);
?>
Результат выполнения кода:
"Array ( [0] => a [1] => b [2] => c [3] => d [4] => e )"
Метод toJson - преобразование в JSON
Метод toJson преобразует коллекцию в JSON-строку.
Это удобно для возврата данных в API-ответах.
<?php
use Illuminate\Support\Collection;
$coll = collect(['a', 'b', 'c', 'd', 'e']);
$res = $coll->toJson();
echo $res;
?>
Результат выполнения кода:
"["a","b","c","d","e"]"