Метод pluck() в колекціях Laravel тепер підтримує closures для параметрів ключа та значення, що усуває потребу в громіздких підходах на зразок mapWithKeys() при простих трансформаціях під час вилучення даних
Раніше для трансформації даних під час застосування методу pluck() доводилося відмовлятись від його зручного синтаксису на користь більш складних методів роботи з колекціями:
$locations = City::get()->mapWithKeys(function ($city) {
return [$city->id => "{$city->country_code} - {$city->name}"];
});
Оновлений метод pluck() спрощує цей процес, підтримуючи closures:
$locations = City::get()
->pluck(fn ($city) => "{$city->country_code} - {$city->name}", 'id');
Розгляньмо систему управління запасами, де потрібно форматувати відображення продуктів:
<?php
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;
}
}
Цей підхід ідеально працює у візуальних контекстах, де важливими є форматовані дані. Створення випадаючих списків стає простішим:
$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>
Підтримка closures справляється з різними потребами трансформації без використання складних операцій мапування. Ви можете конкатенувати поля, застосовувати функції форматування, додавати префікси чи суфікси, а також створювати динамічні ключі на основі властивостей моделі. Це зберігає звичний інтерфейс pluck(), одночасно надаючи гнучкість, яка раніше була доступна лише через більш громіздкі методи колекцій