Что нового в Laravel 12.52.0

Вышел релиз Laravel 12.52.0. Обновление добавляет новые методы для фабрик моделей, улучшает работу очередей и почты, расширяет возможности локального хранилища и повышает стабильность компиляции Blade. Разберём ключевые изменения и посмотрим, как они работают на практике.

Метод makeMany() для фабрик моделей

В фабриках появился новый метод makeMany(). Он дополняет createMany(), но в отличие от него не сохраняет модели в базе данных. Вместо этого возвращается коллекция объектов в памяти.

Это удобно для юнит-тестов и сценариев, где нужно подготовить несколько экземпляров без записи в БД.

// Создать три экземпляра без сохранения
$users = User::factory()->makeMany(3);

// Эквивалент через count()
$users = User::factory()->count(3)->make();

Отключение afterMaking() и afterCreating()

Теперь можно точечно отключать выполнение колбэков afterMaking() и afterCreating(). Это полезно, если фабрика автоматически создаёт связи или выполняет дополнительные действия, которые в конкретном тесте не нужны.

// Пропустить afterMaking
$user = User::factory()->withoutAfterMaking()->make();

// Пропустить afterCreating
$user = User::factory()->withoutAfterCreating()->create();

Временные URL для локального диска

Метод temporaryUploadUrl() теперь поддерживает драйвер local. Ранее он работал только с облачными хранилищами вроде S3.

Это упрощает разработку и тестирование, когда проект использует локальную файловую систему.

$url = Storage::disk('local')->temporaryUploadUrl(
    'uploads/photo.jpg',
    now()->addMinutes(30)
);

Атомарная запись при компиляции Blade

Компилятор Blade теперь использует атомарную запись при сохранении скомпилированных шаблонов. Это устраняет потенциальные состояния гонки, когда несколько процессов одновременно компилируют один и тот же файл и могут повредить кеш.

В результате повышается стабильность приложения под нагрузкой.

Исправление задержки в Mailable::later()

Исправлена ошибка, из-за которой задержка в Mailable::later() некорректно применялась к задаче SendQueuedMailable. Теперь задержка работает ожидаемо.

Также появилась возможность проверять delay в тестах:

Mail::fake();

Mail::to('user@example.com')
    ->later(now()->addMinutes(10), new WelcomeMail());

Mail::assertQueued(WelcomeMail::class, function ($mail) {
    return $mail->delay->equalTo(now()->addMinutes(10));
});

LazyCollection::random() с сохранением ключей

Метод random() у LazyCollection теперь поддерживает параметр $preserveKeys. Если установить его в true, исходные ключи сохраняются.

$collection = LazyCollection::make([
    'a' => 1,
    'b' => 2,
    'c' => 3,
    'd' => 4,
]);

$sample = $collection->random(2, preserveKeys: true);
// Например: ['b' => 2, 'd' => 4]

Строковые выражения в selectExpression()

Метод selectExpression() теперь принимает строку напрямую, а не только объект Expression. Это сокращает лишний код.

// Было
DB::table('orders')
    ->selectExpression(DB::raw('SUM(total) as revenue'));

// Стало
DB::table('orders')
    ->selectExpression('SUM(total) as revenue');

Улучшенные трассировки исключений

В трассировках стека теперь корректно отображаются замыкания и автономные функции. Вместо обезличенных записей выводятся более понятные имена, что упрощает отладку маршрутов и анонимных обработчиков.

Другие исправления и улучшения

В релиз также вошли:

  • исправления работы defer-колбэков в sync-очереди;

  • корректировка Batch::progress() с приведением к int;

  • откат проверок точности столбцов для SQL Server;

  • обновление строки подключения MySQL;

  • улучшения phpDoc-аннотаций и внутренний рефакторинг.

Для большинства проектов обновление не содержит ломающих изменений. Однако если вы используете SQL Server и полагались на изменения из версии 12.51.0, стоит внимательно проверить миграции.

Комментарии (0)

Войдите, чтобы оставить комментарий

Похожие статьи

Laravel AI SDK: создавайте умные приложения с ИИ

Laravel AI SDK - что это, как установить, как он работает и чем полезен разработчикам. Показаны ключевые возможности для создания интеллектуальных AI‑функций в Laravel‑приложениях.

Laravel-Zipstream: потоковая генерация ZIP-архивов без нагрузки на сервер

Обзор пакета laravel-zipstream для потоковой генерации ZIP-архивов в Laravel. Разбираем, как работает стриминг, его преимущества и когда его стоит использовать.