Привет, 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
