Laravel's Collection::wrap method provides seamless conversion of various data types into collections, ensuring consistent collection handling regardless of input format.
The wrap method handles different value types gracefully:
use Illuminate\Support\Collection; // Wrap a single value $collection = Collection::wrap('Alice Smith'); // Result: ['Alice Smith'] // Wrap an array $collection = Collection::wrap(['Alice Smith']); // Result: ['Alice Smith'] // Wrap an existing collection $collection = Collection::wrap(collect('Alice Smith')); // Result: ['Alice Smith']
Here's how you might use it in an email notification service:
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); } }
The wrap method ensures consistent collection handling regardless of input type, making your code more reliable and flexible.