У Laravel 12.48 з'явилися expression aliases для Query Builder

Перекладено ШІ 4 Laravel News 02 червня, 2026

Laravel 12.48.0 додає alias для виразів у Query Builder, нову подію BatchFinished, підтримку прапорів JSON у HTTP‑відповідях та метод skipWhen() для HandleCors. Також покращено типізацію, ізольовано компіляцію Blade під час паралельних тестів і прискорено інстанціювання класів.

Дата випуску: January 20, 2026
Laravel Version: 12.48.0

Коротко

Laravel v12.48.0 додає аліаси для виразів у Query Builder, нові події життєвого циклу пакетів, розширені опції декодування JSON у HTTP-відповідях та подію BatchFinished. Реліз також містить покращення типізації, підтримку ізольованої компіляції view під час паралельного тестування та метод skipWhen для CORS middleware.

Головні новинки:

  • Аліаси для raw-виразів у Query Builder
  • Нова подія BatchFinished для управління життєвим циклом batch
  • Підтримка флагів декодування JSON у HTTP Client
  • skipWhen() для HandleCors middleware
  • Рядки перекладу тепер можуть містити квадратні й фігурні дужки
  • Покращення типізації в HTTP, Queue і Collection
  • Ізольована компіляція view на кожному процесі під час паралельних тестів
  • Покращення продуктивності через нативну інстанціацію класів

Що нового

Псевдоніми виразів у Query Builder

Laravel 12.48.0 додає зручні методи для задання псевдонімів raw-виразів безпосередньо в query builders, що робить raw SQL читабельнішим і простішим у підтримці.

// Before: select available_a - used_a from "users"
// v12.48.0: select (available_a - used_a) as "remaining_a" from "users"
User::select([
    'remaining_a' => new Expression('available_a - used_a'),
]);

Pull Request: #58436

Подія BatchFinished

Додано подію BatchFinished, що спрацьовує, коли batch успішно завершується (усі jobs виконано без помилок). Це доповнює BatchFailed і дає точніший контроль над життєвим циклом пакетів.

use Illuminate\Bus\Events\BatchFinished;
 
Event::listen(function (BatchFinished $event) {
    $batch = $event->batch;
 
    // Perform cleanup or post-processing
    Log::info("Batch {$batch->id} completed successfully");
 
    // Trigger follow-up actions
    dispatch(new NotifyAdminOfCompletion($batch));
});

Застосування:

  • Повідомлення про завершення обробки batch
  • Очищення ресурсів після успішного виконання
  • Збирання метрик або аналітики
  • Запуск додаткових workflow

Pull Request: #58431

Флаги декодування JSON для HTTP Client

Клас Response HTTP Client тепер приймає кастомні флаги декодування JSON, даючи контроль над парсингом JSON-відповідей.

$response = Http::get('https://api.example.com/data');
 
// Decode with custom flags
$data = $response->json(flags: JSON_BIGINT_AS_STRING);
 
// Combine multiple flags
$data = $response->json(
    flags: JSON_BIGINT_AS_STRING | JSON_THROW_ON_ERROR
);

Корисно коли:

  • Потрібно обробляти великі цілі числа за межами PHP int
  • API повертає числові рядки
  • Потрібна строгість парсингу з обробкою помилок

Pull Request: #58379

Пропуск HandleCors у middleware

HandleCors тепер підтримує умовне пропускання через новий метод skipWhen(), що дозволяє обходити CORS для конкретних маршрутів або умов.

use Illuminate\Http\Middleware\HandleCors;
 
// In a service provider or middleware configuration
HandleCors::skipWhen(function ($request) {
    // Skip CORS for internal API calls
    return $request->is('internal-api/*');
});
 
// Or use a simpler condition
HandleCors::skipWhen(fn ($request) => $request->hasHeader('X-Internal-Request'));

Це зручно для внутрішніх endpoint-ів або health checks, які не повинні підлягати CORS-політиці.

Pull Request: #58361

Рядки перекладу з дужками та фігурними дужками

Рядки перекладу тепер можуть містити квадратні ([]) і фігурні ({}) дужки, що дозволяє без проблем додавати приклади коду чи JSON у переклади.

// translations/en/messages.php
return [
    'code_example' => 'Use the format: {user[name]}',
    'array_syntax' => 'Access with: $data[index]',
];

Це знімає обмеження на вміст перекладів і полегшує додавання технічних прикладів.

Pull Request: #58367

Ізольована компіляція view під час паралельних тестів

При паралельних запусках тестів скомпільовані Blade view тепер ізольовані для кожного процесу, що усуває гонки та конфлікти кешу між воркерами.

Наслідки:

  • Паралельні тести не заважають кешу view один одному
  • Компіляція view безпечна для багатьох процесів
  • Підтримується ізоляція тестів на рівні view

Зміни працюють автоматично при використанні in-built паралельного тестування Laravel.

Pull Request: #58390

Покращення подій черги

До подій черги додано додаткові властивості для кращого моніторингу та дебагу:

  • JobPopping тепер містить ім'я черги
  • JobReleasedAfterException містить тривалість backoff
use Illuminate\Queue\Events\JobPopping;
use Illuminate\Queue\Events\JobReleasedAfterException;
 
Event::listen(function (JobPopping $event) {
    Log::debug("Popping job from queue: {$event->queue}");
});
 
Event::listen(function (JobReleasedAfterException $event) {
    Log::info("Job released with backoff: {$event->backoff} seconds");
});

Pull Requests:

  • #58413 (JobPopping queue property)
  • #58414 (JobReleasedAfterException backoff)

Покращення типізації

Laravel 12.48.0 містить низку змін для кращої підтримки IDE та статичного аналізу:

  • Уточнені типи в PendingRequest для автодоповнення
  • Виправлено docblock повертаного типу для Number::abbreviate()
  • Зазначено кортежний тип повернення для Number::pairs()
  • Покращено тип повернення Collection::merge()
  • Розширено повертаний тип PendingRequest::pool(), щоб підтримувати проміси

Це покращує роботу з PHPStan, Psalm та іншими інструментами статичного аналізу.

Pull Requests:

Додаткові покращення

Продуктивність:

  • Використання new $class замість reflection для швидшої інстанціації (#58391)

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

  • Виправлена втрата переназначення змінної (#58376)
  • Відновлено зворотну сумісність з третьосторонніми guards (#58385, #58389)
  • Виправлено TypeError при порожніх параметрах правила валідації (#58380)
  • Виправлено restoreLock для MemoizedStore (#58423)
  • Додано відсутні імпорти (#58394, #58401)

Тестування та якість:

  • Змінено PendingBatchFake для підтримки фільтрації (#58375)
  • Вирішено нескінченний цикл при використанні deferred queue (#58373)
  • Додано тест типів для Illuminate\Support\Str (#58365)

Інші зміни:

  • Регістр незалежні асерти заголовків у TestResponse (#58383)
  • Bus::chain тепер відкидає falsy-елементи (#58369)
  • Видалено індекси з таблиці failed_jobs (#58362)
  • Зроблено PruneCommand::isPrunable() захищеним (#58430)
  • Реалізовано Stringable в Enum rule (#58392)
  • Оновлено залежність tar з 7.4.3 до 7.5.3 (#58404)

Примітки щодо оновлення

Для типової аплікації суттєвих зламів сумісності не очікується. Перед оновленням перегляньте повний changelog.

Якщо ви використовуєте сторонні authentication guards, перевірте потоки автентифікації на сумісність з виправленнями в цьому релізі.

Посилання

Популярні

Інше, що варто прочитати

15 Оновлено 01 червня, 2026

Журнал аудиту в Laravel

Хочете забезпечити повну прозорість у своїх Laravel-додатках? Пакет Laravel Audit Log допоможе вам детально відстежувати всі зміни моделей Eloquent та відповідати вимогам регуляторів. Читайте далі, щоб дізнатися, як цей потужний інструмент може підвищити надійність вашого проєкту

41 Оновлено 01 червня, 2026

Що нового в PHP 8.5

PHP 8.5 обіцяє безліч нових можливостей, таких як оператор Pipe, функції `array_first()` та `array_last()`, а також нове розширення URI. Чи готові ви дізнатися, як ці функції можуть спростити вашу розробку? Читайте далі, щоб дізнатися більше про ці захоплюючі нововведення

17 Оновлено 01 червня, 2026

Обробка геопросторових даних за допомогою Laravel Magellan

Ви готові відкрити нові горизонти у роботі з геопросторовими даними в Laravel? Дізнайтеся, як за допомогою PostGIS та пакету Laravel-Magellan можна легко зберігати, запитувати та маніпулювати інформацією про розташування, перетворюючи ваші проекти на вражаючі рішення у сфері картографії та геолокації!