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

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

Популярні

Logomark Logotype

"SQLSTATE[HY000] [2002] Connection refused" у Laravel в GitHub Actions

Чи стикалися ви з помилкою «SQLSTATE[HY000] [2002] Connection refused» під час налаштування GitHub Actions для вашого додатку на Laravel? У нашій статті ми розглянемо три поширені причини цієї помилки та надамо рішення для їх усунення. Читайте далі, щоб дізнатися, як ваш CI/CD потік може працювати бездоганно!

Logomark Logotype

Laravel Boost — ваш стартовий набір для програмування з використанням штучного інтелекту

Вперше у світі Laravel з'являється можливість, яка значно спростить ваше повсякденне програмування завдяки новому пакету Laravel Boost. Читайте статтю, щоб дізнатися, як посилена інтеграція штучного інтелекту може підвищити ефективність вашої роботи та оптимізувати створення проектів у Laravel

Logomark Logotype

Як задокументувати кілька API в Laravel за допомогою Scramble

Ви знали, що в одному додатку Laravel можна реалізувати кілька API? У нашій статті ви дізнаєтеся, як за допомогою Scramble легко документувати різні версії API та налаштувати доступ до документації, щоб зробити її публічною або приватною. Читайте далі, щоб дізнатися більше