Команда Laravel представила версію 12.9.0, яка містить новий механізм кешування, зручне автозавантаження зв'язків моделей, зворотний виклик на випадок збою транзакцій у базі даних та багато іншого:
Тім Макдональд розробив механізм кешування з мемоізацією, який декорує будь-який інший механізм кешування в пам'яті:
Ми використовуємо кеш, оскільки він швидкий; це не означає, що доступ до кешу є безкоштовним.
Цей PR представляє новий механізм кешування з мемоізацією. Він запам'ятовує значення, отримані з кешу, і зберігає їх у пам'яті на час виконання.
Cache::get('foo'); // звернення до кешу
Cache::memo()->get('foo'); // звернення до кешу
Cache::memo()->get('foo'); // не звертається до кешу
Додаткову інформацію про мемоізацію дивіться в документації по кешу. Також ознайомтеся з Pull Request #55304 для детальної інформації про цю функцію.
Джейсон МакКріарі оновив методи тестування 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();
@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()
для створення екземплярів:
use Illuminate\Support\Fluent;
$instance = Fluent::make($attributes);
Ви можете переглянути повний список нових функцій і оновлень нижче, а також різницю між версією 12.8.0 та 12.9.0 на GitHub. Наступні примітки безпосередньо з журналу змін:
propagateRelationAutoloadCallbackToRelation
від @derian-all-win-software в #55363withPivotValue
від @amir9480 в #55280pda/pheanstalk
7 від @crynobone в #55397MailMessage
від @onlime в #55404make
в Fluent
від @michaelnabil230 в #55417