Laravel's collection
pluck()
method now accepts closures for both key and value parameters, eliminating the need for verbosemapWithKeys()
approaches when applying simple transformations during data extraction.Previously, transforming data while plucking required abandoning the clean
pluck()
syntax in favor of more complex collection methods:
$locations = City::get()->mapWithKeys(function ($city) {return [$city->id => "{$city->country_code} - {$city->name}"];});The enhanced
pluck()
method streamlines this process with closure support:
$locations = City::get()->pluck(fn ($city) => "{$city->country_code} - {$city->name}", 'id');Consider an inventory management system where product listings need formatted display values:
namespace App\Services;use App\Models\Product;use App\Models\Category;class InventoryService{public function getFormattedProducts(){$products = Product::with('category')->get()->pluck(fn ($product) => "#{$product->sku} - {$product->name}", 'id');return $products;}public function getPricedInventory(){$inventory = Product::active()->get()->pluck(fn ($product) => '$' . number_format($product->price, 2), 'sku');return $inventory;}public function getCategorizedItems(){$categories = Category::with('products')->get()->pluck('name', fn ($category) => str_slug($category->name));return $categories;}}This approach works seamlessly in view contexts where formatted data is essential. Building select dropdowns becomes more straightforward:
$productOptions = Product::available()->get()->pluck(fn ($product) => "{$product->brand} {$product->model}", 'id');
<select name="product_id" class="form-control">@foreach($productOptions as $id => $displayName)<option value="{{ $id }}">{{ $displayName }}</option>@endforeach</select>The closure support handles various transformation needs without requiring complex mapping operations. You can concatenate fields, apply formatting functions, add prefixes or suffixes, and create dynamic keys based on model properties. This maintains the familiar
pluck()
interface while providing the flexibility previously available only through more verbose collection methods.
continue reading on laravel-news.com
⚠️ This post links to an external website. ⚠️
If this post was enjoyable or useful for you, please share it! If you have comments, questions, or feedback, you can email my personal email. To get new posts, subscribe use the RSS feed.