Функция collect и класс Collection в Laravel
Коллекцию можно не только получить
из базы, но и создать самому.
Для этого в Laravel есть функция
collect. Ей передают массив
(или другое значение), а на выходе
получают объект коллекции:
<?php
$arr = [1, 2, 3, 4, 5];
$collection = collect($arr);
dump($collection);
?>
Сам объект принадлежит классу
Collection. Функция
collect - короткий способ
создать экземпляр этого класса.
Можно написать и длиннее, через
new Collection($arr),
но на практике почти всегда
используют collect.
С коллекцией работают через методы.
Например, можно посчитать сумму
чисел или взять только чётные -
без ручного foreach:
<?php
$collection = collect([1, 2, 3, 4, 5]);
$sum = $collection->sum();
$even = $collection->filter(function ($item) {
return $item % 2 === 0;
});
dump($sum, $even);
?>
Когда вы делаете User::all()
или Post::get(), Laravel
сам собирает модели в такой же
объект Collection. То есть
ручной collect и выборка
из БД дают один и тот же тип
данных - дальше к нему применяют
одни и те же методы.
Важно: коллекция - это не массив.
У неё нельзя просто писать
$collection['key'] так же
привычно во всех случаях, как
у массива (хотя доступ по ключу
часто работает), и для отладки
удобнее смотреть через dump.
Если нужен именно массив PHP,
коллекцию потом преобразуют
специальными методами - их разберём
в следующих уроках.
Создайте коллекцию из массива чисел и выведите ее.
Убедитесь, что результат
collect - объект класса
Collection.
Получите модели из БД и сравните
тип результата с коллекцией,
созданной через collect.