Что нового в 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)

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

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

Как импортировать библиотеку JavaScript на фронтенде без сборщика

Как подключать JavaScript-библиотеки напрямую в браузере без использования сборщиков. Разбираем форматы модулей, importmap и альтернативные подходы.

Что такое Self-Signed SSL‑сертификат и когда он нужен

Подробная пошаговая инструкция по созданию самоподписанного SSL‑сертификата и его интеграции в Nginx на Ubuntu 24.04. Описаны установка, генерация ключей и настройка HTTPS.