Перетворення будь-якого значення в колекцію за допомогою методу Collection::wrap у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 11 червня, 2025
Метод Collection::wrap у Laravel дозволяє з легкістю перетворювати різні типи даних у колекції, що забезпечує однорідну обробку незалежно від формату введення. Дізнайтеся, як цей метод може зробити ваш код надійнішим та гнучкішим у нашій статті!

Метод Collection::wrap у Laravel забезпечує безперебійну конверсію різних типів даних у колекції, гарантуючи однакову обробку колекцій незалежно від формату вхідних даних

Метод wrap ефективно працює з різними типами значень:

use Illuminate\Support\Collection;
 
// Обгортка одного значення
$collection = Collection::wrap('Alice Smith');
// Результат: ['Alice Smith']
 
// Обгортка масиву
$collection = Collection::wrap(['Alice Smith']);
// Результат: ['Alice Smith']
 
// Обгортка існуючої колекції
$collection = Collection::wrap(collect('Alice Smith'));
// Результат: ['Alice Smith']

Ось приклад використання у сервісі сповіщень по електронній пошті:

class NotificationService
{
    public function sendEmails($recipients, $message)
    {
        return Collection::wrap($recipients)
            ->map(fn($email) => $this->validateEmail($email))
            ->filter()
            ->each(fn($email) => $this->dispatch($email, $message));
    }
 
    public function assignCategories($product, $categories)
    {
        $currentCategories = $product->categories;
        $newCategories = Collection::wrap($categories)
            ->unique()
            ->diff($currentCategories);
 
        $product->categories()->sync($newCategories);
 
        return $product;
    }
 
    public function formatNotifications($notifications)
    {
        return Collection::wrap($notifications)
            ->map(fn($notification) => [
                'id' => $notification->id,
                'message' => $notification->content,
                'timestamp' => $notification->created_at
            ])
            ->sortByDesc('timestamp');
    }
}
 
class AlertController extends Controller
{
    public function broadcast(Request $request, NotificationService $service)
    {
        $alerts = AlertService::latest($request->limit);
        return $service->formatNotifications($alerts);
    }
}

Метод wrap забезпечує єдину обробку колекцій незалежно від типу вхідних даних, роблячи ваш код більш надійним і гнучким