Команда 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Ви готові відкрити нові горизонти у роботі з геопросторовими даними в Laravel? Дізнайтеся, як за допомогою PostGIS та пакету Laravel-Magellan можна легко зберігати, запитувати та маніпулювати інформацією про розташування, перетворюючи ваші проекти на вражаючі рішення у сфері картографії та геолокації!
Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю
Laravel пропонує зручні методи для роботи з датами, які значно спрощують запити до бази даних. Досліджуйте, як ці інтуїтивно зрозумілі функції допомагають створювати чіткі та зрозумілі умови для роботи з часовими даними!