Laravel
February 17
Конвертирование значений в коллекции с методом `wrap` в Laravel
Конвертирование значений в коллекции становится простым и удобным с помощью метода Collection::wrap. Эта универсальная утилита гарантирует, что вы всегда будете работать с коллекцией, независимо от типа входных данных.
Базовое использование
Конвертирование различных типов значений в коллекции:
use Illuminate\Support\Collection;
// Конвертирование отдельное значение
$collection = Collection::wrap('John Doe');
// Result: ['John Doe']
// Конвертирование массив
$collection = Collection::wrap(['John Doe']);
// Result: ['John Doe']
// Конвертирование существующую коллекцию
$collection = Collection::wrap(collect('John Doe'));
// Result: ['John Doe']Реальный пример
Рассмотрим, как это можно использовать в сервисе обработки данных:
class DataProcessor
{
public function processItems($items)
{
return Collection::wrap($items)
->map(fn($item) => $this->formatItem($item))
->filter()
->values();
}
public function addTags($entity, $tags)
{
$existingTags = $entity->tags;
$newTags = Collection::wrap($tags)
->unique()
->diff($existingTags);
$entity->tags()->attach($newTags);
return $entity;
}
public function processSearchResults($results)
{
return Collection::wrap($results)
->map(fn($result) => [
'id' => $result->id,
'title' => $result->title,
'url' => $result->url
])
->sortBy('title');
}
}
// Применение
class SearchController extends Controller
{
public function search(Request $request, DataProcessor $processor)
{
$results = SearchService::find($request->query);
return $processor->processSearchResults($results);
}
}Метод wrap обеспечивает последовательную работу с коллекциями независимо от типа входных данных, делая код более надежным и гибким.