Дата випуску: January 28, 2026 Версія Laravel: 12.49.0
Коротко
Laravel v12.49.0 додає новий метод колекцій hasSole() для перевірки, чи містить колекція рівно один відповідний елемент, а також підтримку підзапитів між колонками, збереження ключів у ланцюжках ресурсних колекцій і підтримку datetime для команди maintenance. Розширено також підтримку enum у сесіях та кеші.
Ключові нововведення:
- Новий метод колекцій
hasSole()(заміщуєcontainsOneItem()) - Підзапит між колонками в query builder —
whereBetweenColumns() - Метод
preserveKeys()для Fluent-ланцюжків ресурсних колекцій - Підтримка datetime для опції
down --retry - Підтримка enum у методах сесії
now()іflash() - Enum-ключі в
Cache::flexible()іwithoutOverlapping() - Пошуковий підказник для команди
db:table - Виправлення витоку пам’яті в
Arr::dot()
Що нового
Метод колекції hasSole()
Laravel 12.49.0 додає hasSole() до колекцій — зручний спосіб перевірити, чи є в колекції рівно один елемент, що відповідає умові. Метод узгоджений з номенклатурою sole() і замінює containsOneItem().
// Check if collection has exactly one item
$collection->hasSole();
// With a callback filter
$collection->hasSole(fn ($item) => $item->active);
// With key/value pair
$collection->hasSole('status', 'pending');
// With operator syntax
$collection->hasSole('age', '>=', 21);
Метод підтримує ті ж гнучкі сигнатури фільтрів, що й sole(), тож він інтуїтивний для розробників, знайомих з API колекцій Laravel.
Pull Request: #58463
Підзапит між колонками
Query builder тепер вміє порівнювати результат підзапиту з двома колонками таблиці за допомогою whereBetweenColumns():
$query->whereBetweenColumns($subquery, ['min_value', 'max_value']);
Це дозволяє перевіряти, чи попадає результат підзапиту в діапазон, заданий значеннями колонок, а не константами. Розширення продовжує попередню роботу із підзапитами для статичних діапазонів.
Pull Request: #58441
preserveKeys() для ресурсних колекцій
AnonymousResourceCollection тепер має метод preserveKeys() для Fluent-ланцюжків, що дозволяє уникнути проміжних змінних:
// Before
$collection = JsonResource::collection($posts);
$collection->preserveKeys = true;
return $collection;
// After
return JsonResource::collection($posts)->preserveKeys();
Це робить налаштування ресурсних колекцій зрозумілішим і послідовнішим з Fluent-API Laravel.
Pull Request: #58443
Підтримка datetime для команди down
Опція --retry у php artisan down тепер приймає рядки datetime поряд із кількістю секунд:
# Retry at a specific datetime
php artisan down --retry="2026-01-28 15:30:00"
# Retry tomorrow at 2 PM
php artisan down --retry="tomorrow 14:00"
# Retry in 2 hours
php artisan down --retry="+2 hours"
# Unix timestamp
php artisan down --retry="@1735660200"
Datetime конвертується в формат RFC 7231 для заголовка Retry-After. Якщо вказано минулу дату, команда видає попередження, щоб уникнути помилкових налаштувань під час технічних робіт.
Pull Request: #58509
Розширена підтримка enum
У цьому релізі продовжено інтеграцію enum — додано підтримку в нових місцях:
Методи сесії:
Методи сесії now() і flash() тепер приймають enum-значення як ключі, уніфікуючи поведінку з іншими методами сесії.
Pull Request: #58459
Методи кешу:
Cache::flexible() і Cache::withoutOverlapping() тепер підтримують enum-ключі для типобезпечного керування ключами кешу.
Pull Request: #58444
Пошуковий підказник для db:table
Команда php artisan db:table тепер використовує пошукову підказку для вибору таблиці, що спрощує роботу з великими базами даних.
Pull Request: #58442
Виправлення помилок та покращення
Виправлення:
- Виправлено витік пам’яті в
Arr::dot()(#58458) - Використано багатобайтові безпечні функції в
Str::afterLast()(#58457) - Очищення скомпільованих view після паралельних тестів (#58440)
- Пропуск серіалізації повідомлення, якщо рівень логування не обробляється (#58475)
- Ігнорування deadlock при звільненні DatabaseLock (#58507)
- Використання присвоєння замість мутації для незмінних об’єктів Carbon (#58498)
Покращення:
- Збереження одного екземпляра NotificationSender для кращої продуктивності (#58452)
- Робимо
QueueFake::assertPushedTimesпублічним (#58511) - Покращена валідація підказок індексів для кількох індексів (#58505)
- Додана відсутня документація
@paramдля конструктора SessionGuard (#58493) - Оновлено залежність tar з 7.5.3 до 7.5.6 (#58454)
Відкати:
- Скасовано фічу "aliasing when selecting database expressions" (#58469)
Примітки щодо оновлення
Для типової аплікації сумісних порушень не очікується. Перед оновленням перегляньте повний changelog для деталей.