Вышел Laravel 12.51.0Привет, Laravel-разработчики! Только что вышел новый минорный релиз — Laravel 12.51.0. Несмотря на номер, здесь собралось множество полезных и долгожданных фич, а также важные исправления для повседневной работы. Вот на что стоит обратить внимание.
🚀 Что нового и полезного🔹
Умная валидация с whenFails() и whenPasses() (#58655)Теперь с валидатором можно работать еще изящнее. Добавили два новых метода, которые запускают код только при определенном исходе проверки. Это гораздо чище, чем старые
if-else блоки после
$validator->fails().
🔹
Гибкие значения в firstOrCreate (#58639)Классная фишка! Методы
firstOrCreate и
createOrFirst теперь наконец-то поддерживают замыкания для значений. Это решает давнюю проблему, когда нужно было динамически вычислить значение для создания, но нельзя было передать функцию.
🔹
Событие отмены пакетных заданий BatchCancelled (#58627)Для тех, кто активно работает с пакетными заданиями в очередях, добавили специальное событие
BatchCancelled. Теперь вы можете легко отследить и отреагировать, когда пользователь (или система) отменил выполнение целого пакета задач.
🔹
Код после отправки уведомления (afterSending) (#58654)Уведомления обзавелись методом
afterSending(). Хотите логировать факт отправки, обновлять статус в БД или запускать следующую задачу только после того, как письмо улетело? Теперь это делается в пару строчек прямо в классе нотификации.
🔹
Таймаут для запросов MySQL (#58644)Прямо в Query Builder для MySQL добавили метод
timeout(). Теперь не нужно лезть в глубокую конфигурацию соединения, чтобы задать лимит выполнения для одного конкретного тяжелого запроса. Удобно для оптимизации.
🔹
Сортировка сводной таблицы по убыванию (#58720)В отношениях «многие-ко-многим» давно был
orderByPivot(). Теперь добавили и orderByPivotDesc() для полного счастья и читаемости кода.
🛠 Важные исправления🔹
Очереди: Исправлена критическая ошибка в подсчете заданий внутри пакета (Batch), когда используется опция
deleteWhenMissingModels (#58541). Также пофиксили работу
Queue::fake() — теперь он корректно сбрасывает блокировки уникальных заданий между тестами (#58718), что могло приводить к ложным успехам в тестах.
🔹
PostgreSQL: Поправили определение начального значения для sequence (автоинкремента), если вы используете нестандартные схемы или названия соединений (#58199). Баг мог приводить к конфликтам первичных ключей.
🔹
Строки: Метод
Str::isUrl() больше не будет выдавать ложный сигнал об ошибке на однобуквенных доменах (#58686). А
Str::substrReplace() теперь правильно работает с отрицательными значениями
offset и
length в крайних случаях (#58634).
⚙️ Улучшения под капотом и для разработчика🔹
Тестирование стало лучше: Для фейковых пакетов заданий добавили метод
assertJobs() (#58606). А
Bus::assertBatched() теперь можно вызывать, передавая массив для проверки (#58659). Еще добавили изоляцию префиксов кеша для параллельного тестирования, чтобы тесты не мешали друг другу (#58691).
🔹
Безопасность и инфраструктура: Добавили поддержку SSL-сертификатов при дампе и загрузке схемы базы данных MySQL через Artisan-команды (#58690).
🔹
Типы и IDE: Очередная порция улучшений аннотаций PHPDoc и исправлений типов по всей кодовой базе. Особенно много правок в хелперах, валидации и HTTP-клиенте. Ваша IDE будет больше понимать и меньше ругаться.
🔹
Уведомление об устаревании: Методу
Request::get() официально добавили пометку
@deprecated (#58635). Пора переходить на использование свойства запроса (например,
$request->name) или
метода input().
💎 Что в итоге?Laravel 12.51.0 — это тот случай, когда минорный релиз приносит мажорное удовольствие. Новые методы для валидатора и уведомлений решают реальные боли, а исправления в очередях и PostgreSQL — закрывают важные грабли. Если вы на 12.x ветке — обновляйтесь смело, благо
composer update сделает всё быстро.
Полный список всех коммитов в официальном changelog:
https://github.com/laravel/framework/releases/tag/v12.51.0📱
@dev_notes_ru#Laravel #Laravel12 #PHP #Backend