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 обеспечивает последовательную работу с коллекциями независимо от типа входных данных, делая код более надежным и гибким.