Метод Pluck у Laravel Collection отримує нову силу завдяки трансформації через замикання

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 23 вересня, 2025
Метод `pluck()` у Laravel тепер підтримує замикання для параметрів ключа та значення, що спрощує обробку даних без необхідності використовувати громіздкі методи `mapWithKeys`. Дізнайтеся, як ця нова можливість може спростити ваш код і підвищити ефективність під час роботи зі складними структурами даних

Метод 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(), одночасно надаючи гнучкість, яка раніше була доступна лише через більш громіздкі методи колекцій