Cache Concurrency Limiting у Laravel 12.53.0

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 26 лютого, 2026
Laravel 12.53.0 додає Cache::funnel для обмеження паралельних операцій на будь-якому драйвері кешу, підтримку іменованих аргументів у подіях та використання попередньо обчислених tsvector у PostgreSQL. Деталі та приклади — читайте далі.

Laravel v12.53.0 додає Cache::funnel() для обмеження конкурентності на будь-якому кеш-драйвері з підтримкою замків, вводить підтримку іменованих аргументів при диспатчі та broadcasting подій і розширює повнотекстовий пошук у PostgreSQL підтримкою попередньо обчислених tsvector-колонок.

Основні новинки:

Що нового

Cache::funnel() — обмеження конкурентності

Cache::funnel() додає механізм обмеження конкурентності для будь-якого кеш-драйвера, що підтримує атомарні замки — зокрема драйвери array, file, database та Redis. Раніше обмеження конкурентності базувалося на Redis::funnel() та вимагало підключення до Redis. Тепер фасадний метод працює на різних драйверах, використовуючи ті самі примітиви замків, що вже є в шарі кешу.

Cache::funnel('payment-processing')
    ->limit(3)
    ->releaseAfter(60)
    ->then(
        fn() => processPayment(),
        fn() => 'Currently at capacity'
    );

Якщо драйвер не підтримує замки, буде кинуто BadMethodCallException. Якщо таймаут блокування мине і не вказано callback невдачі, буде кинуто LimiterTimeoutException.

Pull Request: #58439

Іменовані аргументи в диспатчі та broadcasting подій

Трейт Dispatchable тепер підтримує іменовані аргументи при виклику dispatch() та broadcast() у класах подій. Раніше трайт використовував func_get_args(), що знехтувало іменами аргументів. Перехід на варіадичний синтаксис дозволяє іменованим аргументам потрапляти в конструктор події.

// Before — positional arguments only
event(new UserSubscribed($user, $plan, $metadata));
 
// After — named arguments now work
UserSubscribed::dispatch(
    user: $user,
    plan: $plan,
    metadata: ['source' => 'checkout'],
);

Це узгоджується з тим, як іменовані аргументи вже працюють для dispatching job'ів. Існуючі виклики з позиційними аргументами продовжать працювати без змін.

Pull Request: #58913

PostgreSQL: повнотекстовий пошук з попередньо обчисленими tsvector-колонками

whereFullText() отримав опцію vector для PostgreSQL, яка трактує колонку як попередньо обчислений tsvector, замість того щоб обгортати її в to_tsvector() при кожному запиті. Це корисно, якщо ви підтримуєте окрему tsvector-колонку — часто з індексом GIN — щоб уникнути витрат на повторне обчислення вектору під час запиту.

// Without vector option — wraps column in to_tsvector()
$query->whereFullText('body', $term, ['language' => 'english']);
 
// With vector option — uses the column directly
$query->whereFullText('search_vector', $term, [
    'vector' => true,
    'language' => 'english',
    'mode' => 'websearch',
]);
 
// Also works with multiple tsvector columns
$query->whereFullText(['tsv_title', 'tsv_body'], $term, ['vector' => true]);

Pull Request: #58893

buildMorphMapFromModels() приймає ключі масиву

buildMorphMapFromModels() тепер приймає масиви з будь-якими типами ключів — рядковими або цілими — при побудові morph map з моделей. Раніше параметр приймав лише список з числовими ключами, що перешкоджало використанню кастомних рядкових псевдонімів:

// Custom string aliases now work
Relation::buildMorphMapFromModels([
    'post' => Post::class,
    'video' => Video::class,
]);

Pull Request: #58891

php artisan down оновлює опції maintenance mode на місці

php artisan down тепер може повторно запускатися, коли додаток вже в режимі технічного обслуговування, щоб оновити опції — наприклад secret, message або retry — без необхідності спочатку виводити сайт з цього режиму. Раніше треба було виконати php artisan up перед зміною налаштувань maintenance mode.

# Put site in maintenance mode
php artisan down --secret="my-secret"
 
# Update the secret without bringing the site back up
php artisan down --secret="new-secret"

Pull Request: #58918

Event-макроси для груп розкладу

Event-макроси для запланованих команд тепер можна застосовувати до груп розкладу, що дозволяє зареєструвати спільну поведінку один раз і застосувати її до всіх команд у групі замість кожного запису окремо.

Pull Request: #58926

Виправлення помилок та покращення

Database:

Queue & Jobs:

HTTP & Caching:

Testing:

Mail:

Посилання

Популярні

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

Intervention Image: потужний інструмент для роботи з зображеннями у Laravel

Досліджуйте потужний пакет Intervention Image для PHP, який виводить редагування зображень на новий рівень з оновленою версією 3. Чи готові ви дізнатися, які нові можливості та функції чекають на вас у цьому інструменті