Что нового в Laravel 12.54.0

Команда Laravel выпустила обновление Laravel 12.54.0. В релизе появилось несколько небольших, но полезных улучшений для работы с моделями, HTTP-клиентом, тестированием и очередями. Основное нововведение это метод Model::withoutRelation(), который позволяет гибко управлять загруженными связями Eloquent-моделей. Разберём основные изменения подробнее.

Новый метод Model::withoutRelation()

В Eloquent уже есть методы для работы с загруженными связями:

  • withoutRelations() удаляет все связи;

  • unsetRelation() удаляет конкретную связь, но изменяет текущую модель.

Новый метод withoutRelation() закрывает промежуточный сценарий. Он создаёт копию модели, в которой удалены указанные связи, не изменяя исходный объект.

Пример использования:

// Удалить одну связь из копии модели
$lightweight = $post->withoutRelation('comments');

// Удалить несколько связей
$lightweight = $post->withoutRelation(['comments', 'tags']);

// Исходная модель остается без изменений
$post->relationLoaded('comments'); // true

Такой подход полезен в нескольких ситуациях:

  • при сериализации моделей;

  • при отправке моделей в очередь;

  • при работе с циклическими зависимостями;

  • когда нужно уменьшить размер payload.

Фактически это удобный способ сделать облегчённую версию модели.

Метод interval() для обработки временных интервалов

В трейте InteractsWithData появился новый метод interval(). Он позволяет преобразовывать входные данные запроса в объект CarbonInterval. Метод понимает несколько форматов.

ISO-8601 интервал

$request->interval('duration');

Например:

P1DT2H

Это будет интерпретировано как 1 день и 2 часа.

Числовое значение + единица измерения

$request->interval('timeout', 'second');  // "90" → 90 секунд
$request->interval('cooldown', 'day');    // "7" → 7 дней

Использование enum из Carbon

$request->interval('delay', Unit::Minute);

Это делает работу с временными интервалами в формах и API значительно удобнее.

Улучшение Response::dump() в HTTP-клиенте

Метод dump() в HTTP-клиенте Laravel теперь выводит больше контекста.

Раньше он показывал только тело ответа. Теперь дополнительно выводятся следующие данные:

  • HTTP-метод запроса

  • URL

  • статус ответа

Пример нового вывода:

POST https://api.stripe.com/v1/charges 422
{"error": {"message": "Invalid card"}}

Это особенно удобно, если в коде выполняется несколько HTTP-запросов подряд.

Поддержка BinaryFileResponse в тестах

Теперь тестовый класс TestResponse умеет корректно работать с ответами типа BinaryFileResponse. Это значит, что можно проверять содержимое файлов, возвращаемых через:

response()->file()
response()->download()

Пример теста:

$this->get('/download/report.pdf')
    ->assertOk()
    ->assertStreamedContent(file_get_contents('report.pdf'));

Раньше такие проверки не работали, потому что тестовый ответ не мог прочитать файл.

Улучшение команды queue:monitor

Команда queue:monitor теперь показывает возраст самого старого задания в очереди прямо в стандартном текстовом выводе. Раньше эта информация была доступна только в JSON-формате, что делало её менее удобной для быстрой диагностики. Теперь можно сразу увидеть, если задания слишком долго висят в очереди.

Индекс для таблицы jobs

В таблицу jobs добавлен составной индекс, который ускоряет опрос очереди.

Это улучшение снижает нагрузку на базу данных и ускоряет выборку заданий, особенно в системах с большим количеством воркеров.

Поддержка PostgreSQL tsvector

В Schema Builder появился новый тип столбца tsvector для PostgreSQL. Этот тип используется для полнотекстового поиска, поэтому его появление упрощает настройку search-индексов прямо через миграции Laravel.

Поддержка расширений CommonMark для Markdown-писем

Laravel теперь позволяет подключать кастомные расширения CommonMark при рендеринге Markdown-шаблонов для email. Это даёт больше гибкости при создании сложных шаблонов писем.

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

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

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

Кастомные директивы Blade в Laravel

Руководство по созданию и использованию пользовательских Blade-директив в Laravel. Объясняем, какие бывают директивы, где их регистрировать и как применять для улучшения шаблонов.

PHP Generators

Статья рассказывает о PHP генераторах - что это, как они работают, зачем нужны и как использовать их в реальных проектах. Примеры включают чтение больших CSV и потоковую обработку данных.

Условные операторы if else в Bash и shell-скриптах

Использование условных операторов if, else и elif в shell-скриптах Bash. Рассматриваются базовый синтаксис, числовые и строковые сравнения, проверки файлов, вложенные условия и практические примеры для повседневных задач администрирования и автоматизации.