Меморизований кеш-драйвер у Laravel 12.9

Перекладено ШІ 1 Laravel News 02 червня, 2026

Оновлення Laravel до версії 12.9.0 принесло низку захоплюючих функцій, включаючи новий драйвер кешу з мемоізацією та автоматичне завантаження стосунків моделі. Які ще нововведення та поліпшення вас очікують? Читайте далі, щоб дізнатися про всі деталі

Команда Laravel представила версію 12.9.0, яка містить новий механізм кешування, зручне автозавантаження зв'язків моделей, зворотний виклик на випадок збою транзакцій у базі даних та багато іншого:

# Механізм кешування з мемоізацією

Тім Макдональд розробив механізм кешування з мемоізацією, який декорує будь-який інший механізм кешування в пам'яті:

Ми використовуємо кеш, оскільки він швидкий; це не означає, що доступ до кешу є безкоштовним.

Цей PR представляє новий механізм кешування з мемоізацією. Він запам'ятовує значення, отримані з кешу, і зберігає їх у пам'яті на час виконання.

Cache::get('foo');         // звернення до кешу
Cache::memo()->get('foo'); // звернення до кешу
Cache::memo()->get('foo'); // не звертається до кешу

Додаткову інформацію про мемоізацію дивіться в документації по кешу. Також ознайомтеся з Pull Request #55304 для детальної інформації про цю функцію.

# Оновлення тестів freeze Time

Джейсон МакКріарі оновив методи тестування freezeTime() та freezeSecond(), які тепер повертають дату, якщо не задано зворотний виклик:

Цей PR оновлює freezeTime і freezeSecond таким чином, щоб вони повертали "заморожений час" без необхідності задавати зворотний виклик. Це дозволяє більш зручне тестування без неприємних моментів.

// До
$now = now();
Carbon::setTestNow($now);
$post->slug = $slug;
$post->save();
$package->refresh();
$this->assertTrue($now->equalTo($post->updated_at));

// Після
$now = $this->freezeSecond();
$post->slug = $slug;
$post->save();
$package->refresh();
$this->assertTrue($now->equalTo($post->updated_at));

Деталі обговорення та реалізації можна знайти у Pull Request #55323.

# Додано зворотний виклик для збоїв транзакцій у БД

Дейві Шафік розширив метод DB::transaction(), додавши можливість передавати зворотний виклик, який виконується при невдачі транзакції:

DB::transaction(
    callback: function () {
        // виконати дії з БД
    },
    onFailure: function () {
        Notification::send($admin, new SomethingImportantBroke());
    }
);

# Автозавантаження зв'язків моделі

Сергій Літвінчук додав функцію автозавантаження зв'язків моделей:

У поточній реалізації #53655 автоматичне завантаження зв'язків можливе лише для колекцій.

Іноді нам потрібно активувати автоматичне завантаження зв'язків для однієї моделі:

// До
$post->tags->withRelationshipAutoloading();
$post->authors->withRelationshipAutoloading();

// Після
$post->withRelationshipAutoloading();

# Додано детальні повідомлення про помилки до assertViewHas()

@3Descape оновив повідомлення про помилки для assertViewHas(). Наприклад:

$response->assertViewHasAll([
    'key_without_value',
    'key_with_value' => 10,
    'key_with_closure' => fn ($value) => $value == 10,
    'key_with_model' => Customer::first(),
    'key_with_collection' => Customer::factory()->count(10)->create(),
]);

Тепер, якщо буде зафіксовано збій, ви отримаєте інформативні деталі про помилку:

# До
1) Tests\Feature\App\Http\CustomerControllerTest::a_test_example
Не вдалося стверджувати, що false є true.

// Після
1) Tests\Feature\App\Http\CustomerControllerTest::a_test_example
Не вдалося стверджувати, що 'key_with_value' відповідає очікуваному значенню.
Не вдалося стверджувати, що 0 відповідає 10.

# Метод Fluent make()

Майкл Набіль додав метод Fluent::make() для створення екземплярів:

use Illuminate\Support\Fluent;

$instance = Fluent::make($attributes);

# Примітки до випуску

Ви можете переглянути повний список нових функцій і оновлень нижче, а також різницю між версією 12.8.0 та 12.9.0 на GitHub. Наступні примітки безпосередньо з журналу змін:

# v12.9.0

  • Додано типи до ViewErrorBag від @AJenbo в #55329
  • Додано типи до MessageBag від @AJenbo в #55327
  • [12.x] додано генералії до методів у Schema/Builder від @taka-oyama в #55330
  • Повернення "замороженого часу" для легшого тестування від @jasonmccreary в #55323
  • Поліпшення DetectsLostConnections для підтримки сценарію обертання облікових даних AWS Aurora від @msaifmfz в #55331
  • [12.x] перейменування методу тестування failedRequest() від @LKaemmerling в #55332
  • Додано зворотний виклик для збоїв транзакцій від @dshafik в #55338
  • [12.x] додано метод withRelationshipAutoloading до моделі від @litvinchuk в #55344
  • [12.x] активовано повторні запити HTTP, коли посередник викликає виняток від @27pchrisl в #55343
  • [12.x] виправлено помилку серіалізації Closure в автоматичному завантаженні зв'язків від @litvinchuk в #55345
  • Додано тест для правила валідації Unique з умовами WhereIn від @mohammadrasoulasghari в #55351
  • Додано @throws у документації від @mohammadrasoulasghari в #55361
  • [12.x] оновлено документацію методу propagateRelationAutoloadCallbackToRelation від @derian-all-win-software в #55363
  • [12.x] Redis - спершу встановити підключення, перш ніж задавати параметри від @alexmontoanelli в #55370
  • [12.x] виправлено перевизначення FileLoader з відсутнім ключем від @fabio-ivona в #55342
  • [12.x] виправлено події моделі pivot, які не працюють при використанні withPivotValue від @amir9480 в #55280
  • [12.x] представлено механізм кешування з мемоізацією від @timacdonald в #55304
  • [12.x] додано тест для методу Filesystem::lastModified() від @roshandelpoor в #55389
  • [12.x] підтримка pda/pheanstalk 7 від @crynobone в #55397
  • [12.x] додано комплексні тести для операцій файлової системи до FilesystemTest від @roshandelpoor в #55399
  • Оновлено vite з 5.4.17 до 5.4.18 в /src/Illuminate/Foundation/resources/exceptions/renderer від @dependabot в #55402
  • Додано детальні повідомлення про помилки до assertViewHas() від @3Descape в #55392
  • Використання анотацій загальних типів для методів LazyCollection від @mohammadrasoulasghari в #55380
  • [12.x] додано тестове покриття для процесу з кількома змінними середовища від @roshandelpoor в #55406
  • [12.x] виправлено об'єднання адрес cc/bcc/replyTo в MailMessage від @onlime в #55404
  • [12.x] додано функцію make в Fluent від @michaelnabil230 в #55417

Популярні

Інше, що варто прочитати

20 Оновлено 01 червня, 2026

Створення MCP-серверів на PHP

Модельний контекстний протокол (MCP) відкриває нові горизонти в інтеграції AI-додатків з PHP. Дізнайтеся, як легко створити сервер, що відповідає MCP, та які можливості відкриваються для вашого проєкту

17 Оновлено 01 червня, 2026

Обробка геопросторових даних за допомогою Laravel Magellan

Ви готові відкрити нові горизонти у роботі з геопросторовими даними в Laravel? Дізнайтеся, як за допомогою PostGIS та пакету Laravel-Magellan можна легко зберігати, запитувати та маніпулювати інформацією про розташування, перетворюючи ваші проекти на вражаючі рішення у сфері картографії та геолокації!

18 Оновлено 01 червня, 2026

Перетворення даних у типобезпечні DTO за допомогою пакету Data Model

Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю