Voydevich
Laravel

Laravel 13.39.0: відключення первинного ключа та атомарний кеш

Реліз Laravel 13.39.0 додає атрибут #[Table(key: false)], команду session:garbage-collect, атомарний запис кешу та розширення для черг і тестування.

Записи з 27 жовтня 2026 по 27 жовтня 2026 · оновлено 8 листопада 2026

Головне

  • Атрибут #[Table(key: false)] для вимкнення первинного ключа моделі
  • Атомарний запис файлів кешу для config, route та event
  • Додано тривалість виконання до події JobAttempted
  • Нова консольна команда session:garbage-collect
  • Методи forceCreate і forceCreateQuietly для зв'язку BelongsToMany

Коротко

У релізі Laravel 13.39.0 з'явилася можливість відключати первинні ключі моделей через атрибут #[Table(key: false)], а також нова команда session:garbage-collect. Файли кешу конфігурацій, маршрутів та подій тепер записуються атомарно. Крім того, оновлення принесло покращення для тестування процесів і пошти, розширення подій черг та низку виправлень в Eloquent.

Нові можливості

База даних та Eloquent

  • Вимкнення первинного ключа через атрибут: додано атрибут #[Table(key: false)], який дозволяє моделям працювати без визначеного первинного ключа.
  • Нові методи у BelongsToMany: для зв'язку додано методи forceCreate та forceCreateQuietly.
  • Методи створення та відновлення у through-зв'язках: реалізовано підтримку restoreOrCreate() та createOrRestore() для through-релейшенів.
  • Атрибут WithoutMigrationEvents: додано новий атрибут WithoutMigrationEvents для керування подіями міграцій.

Черги та події

  • Тривалість виконання у JobAttempted: до події JobAttempted додано параметр duration (тривалість також передається для синхронних черг через sync).
  • Атомарний кеш: запис кеш-файлів для конфігурацій, маршрутів та подій тепер відбувається атомарно.

Консоль та сесії

  • Очищення сесій: створено та зареєстровано нову команду session:garbage-collect (SessionGarbageCollectCommand).
  • Методи розміру для валідації масивів: додано методи визначення розміру (size methods) до білдера правил валідації масивів.

Тестування

  • Оновлення BusFake: додано метод withoutDispatchingAfterResponses.
  • Фейки для MailFake: додано методи html() та plain().
  • Шортхенди для процесів: реалізовано підтримку скорочених позначень коду виходу та винятків під час тестування запуску процесів через фейки.

Виправлення та покращення

  • Черги: queue:retry більше не зупиняється на завданнях із видаленою моделлю, а також виправлено обробку нескалярних ідентифікаторів невдалих завдань; помилки паралелізму під час резервування завдань у database більше не призводять до падіння.
  • База даних та транзакції: RefreshDatabase тепер відкочує всі рівні вкладених транзакцій після кожного тесту; менеджер транзакцій відкочується при невдалому commit; виправлено блокування транзакцій у PostgreSQL через кеш-блокування.
  • Eloquent: колонки півот-таблиць тепер кваліфікуються всередині замикань wherePivot; виправлено роботу latest() та oldest() із підзапитами join; виправлено методи restoreOrCreate() і createOrRestore() на зв'язках; виправлено помилки N+1 під час завантаження зв'язків у колекціях JSON:API ресурсів.
  • Маршрутизація та Octane: усунено витік попереднього маршруту в запити зі статусом 404 під середовищем Octane; виправлено тип повернення Request::route(), коли маршрут не знайдено.
  • Валідація: виправлено помилку у Rule::anyOf() при передачі асоціативних масивів; виправлено виняток у distinct:ignore_case на значеннях із некоректним кодуванням UTF-8.
  • Кеш та сховище: потоковий обгортковий протокол phar:// заблоковано у Filesystem::exists() та isFile() (при цьому дозволено читання файлів із запущеного phar); виправлено команду cache:prune-stale-tags з опцією SCAN_PREFIX у phpredis; клієнт phpredis автоматично перебудовується у разі попередження broken pipe.
  • HTTP та розсилки: Http::batch() більше не вважає помилки викликів retry() та throw() успішними; зображення в сповіщеннях Markdown тепер вбудовуються лише один раз.
  • Команди: команда schedule:interrupt тепер завершується з помилкою, якщо вимкнено опитування переривань; значення --retry у команді down тепер конвертується у GMT; команда install:broadcasting більше не пропускає файли app.jsx та app.js.

Версії тижня

  • v13.39.0 — 2026-10-27

Огляд підготовлено автоматично за офіційними release notes за допомогою ШІ та перевірено на відповідність джерелу. Точні формулювання дивіться в оригіналі. Як ми працюємо