TGViewer
Заметки разработчика Заметки разработчика @dev_notes_ru · 458 subscribers
Post #1706 230
Вышел 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
More from @dev_notes_ru
  1. Apr 27, 2026Уникальный индекс при мягком удалении: решаем проблему дубликатов При использовании мягког…
  2. Apr 23, 2026Статические переменные в PHP: использование static внутри функций По данным исследования E…
  3. Apr 21, 2026Валидация массивов в Laravel без N+1: Form Request как построитель контекста Применение пр…
  4. Apr 13, 2026JSON в браузере: import или fetch — руководство по выбору Спойлер: import из JSON — это не…
  5. Apr 6, 2026Проксирование fetch() в серверном JavaScript Стандарт Fetch не специфицирует проксирование…
  6. Apr 2, 2026Taskfile: Когда пора отказаться от Makefile (а когда — нет) Makefile — инструмент с почти…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →