Вийшов Laravel 12.51.0. Реліз зосереджений на контрольованій обробці, читабельній валідації та точковому контролі SQL-запитів.
Ключові зміни
-
Notification::afterSending() для post-send логіки по каналах. Метод викликається після фактичної відправки в кожен канал окремо. Зручно оновлювати статуси (notified_at), писати аудит або запускати події.
-
Validator::whenFails() і whenPasses() замість ручних if. Валідація стає флюентною: реакція на fail/pass описується в одному ланцюжку. Особливо корисно в jobs/commands, де немає стандартного HTTP-flow.
-
->timeout() у Query Builder для MySQL (MAX_EXECUTION_TIME). Додає ліміт часу виконання на рівні конкретного запиту, а не всього з’єднання. Добре для важких пошуків і звітів, де важливо не блокувати БД надовго.
-
Closure у firstOrCreate() / createOrFirst() для lazy-обчислень. Дорогі обчислення виконуються тільки якщо запису ще не існує. Це прибирає зайві API-виклики, геокодування чи обробку файлів.
-
Глобальна подія BatchCancelled для відміни batch-задач. Подія спрацьовує і при ручному cancel, і при автоскасуванні через помилку. Можна централізовано логувати, сповіщати команду або чистити ресурси.
-
Eloquent builder як subquery в update() без toBase(). Тепер Eloquent-підзапити можна передавати напряму, без зайвого перетворення. Код коротший, читабельніший і ближчий до бізнес-логіки.
-
response()->withoutHeader() для видалення HTTP-заголовків. Можна прибрати один або кілька заголовків симетрично до withoutCookie(). Зручно для hardening-відповідей і прибирання службових заголовків у prod.
use Illuminate\Support\Facades\Validator;
Validator::make($data, ['file' => 'required|image'])
->whenFails(fn () => throw new InvalidArgumentException())
->whenPasses(fn () => logger('Valid payload'));
$user = User::query()
->where('email', 'like', '%@company.com')
->timeout(60)
->first();
$location = Location::firstOrCreate(
['address' => $address],
fn () => ['coordinates' => Geocoder::resolve($address)],
);
return response('ok')
->withoutHeader(['X-Debug', 'Server']);
Джерело: laravel-news.com/laravel-12-51-0