Команда Laravel випустила версію v12.8.0, яка включає автоматичне завантаження зв'язків, створення екземпляра колекції з рядка JSON та інші нововведення:
# Автоматичне завантаження зв'язків
Сергій Литвинчук представив функцію автоматичного завантаження зв'язків:
У великих проєктах важко відслідковувати та вручну вказувати, які зв'язки повинні бути завантажені заздалегідь, особливо якщо ці зв'язки глибоко вкладені або використовуються динамічно. Тому автоматичне завантаження зв'язків може бути корисним.
// замість цього
$projects->load([
'client.owner.details',
'client.customPropertyValues',
'clientContact.customPropertyValues',
'status',
'company.statuses',
'posts.authors.articles.likes',
'related.statuses'
]);
// можна використовувати це
$projects->withRelationshipAutoloading();
Ось ще один приклад із опису запиту на зміни:
$orders = Order::all()->withRelationshipAutoloading();
foreach ($orders as $order) {
echo $order->client->owner->company->name;
}
// автоматичні виклики:
// $orders->loadMissing('client');
// $orders->loadMissing('client.owner');
// $orders->loadMissing('client.owner.company');
Ви можете увімкнути автоматичне завантаження для моделей за допомогою такого статичного методу:
Model::automaticallyEagerLoadRelationships();
# Створення колекції з JSON
@DarkGhostHunter додав метод fromJson до класу Collection, який дозволяє створити колекцію з рядка JSON:
// Раніше
$collection = new Collection(json_decode($json, true));
// Тепер
$collection = Collection::fromJson($json);
Метод fromJson() також підтримує аргументи глибини та флагів, які ви можете передати до json_decode():
$collection = Collection::fromJson(json: $json, flags: JSON_THROW_ON_ERROR);
# Варіанти "Create Many" для зв'язків HasOneOrMany
Філіп Ієцці реалізував методи forceCreateMany() та forceCreateManyQuietly() для зв'язку HasOneOrMany:
$post->comments()->forceCreateMany($data);
$post->comments()->forceCreateManyQuietly($data);
Приклад із опису запиту на зміни, який вимагає примусового створення окремих моделей:
// Раніше
collect($comments)
->map(fn (array $comment) => [
...$comment,
// підOverride деякі атрибути
])
->each(fn (array $comment) => $post->comments()->forceCreateQuietly($comment));
// Тепер
collect($comments)
->map(fn (array $comment) => [
...$comment,
// підOverride деякі атрибути
])
->pipe($post->comments()->forceCreateManyQuietly(...));
# Примітки про випуск
Ви можете переглянути повний список нових функцій та оновлень нижче, а також зміни між 12.7.0 та 12.8.0 на GitHub. Примітки про випуск безпосередньо з журналу змін:
# v12.8.0
- [12.x] Перевірка на м'яке видалення виконується лише один раз під час масового очищення від @cosmastech в https://github.com/laravel/framework/pull/55274
- [12.x] Додано варіанти масового присвоєння створення CreateMany до зв'язку
HasOneOrManyвід @onlime в https://github.com/laravel/framework/pull/55262 - Косметичне: додано випадок is_array() у конструкцію match getArrayableItems від @epic-64 в https://github.com/laravel/framework/pull/55275
- Додано тести для InvokeSerializedClosureCommand від @Amirhf1 в https://github.com/laravel/framework/pull/55281
- [12.x] Тимчасова заборона PHPUnit 12.1 від @crynobone в https://github.com/laravel/framework/pull/55297
- [12.x] Поліпшення тестів від @crynobone в https://github.com/laravel/framework/pull/55306
- Оновлено vite з 5.4.12 до 5.4.17 у /src/Illuminate/Foundation/resources/exceptions/renderer від @dependabot в https://github.com/laravel/framework/pull/55301
- [12.x] Поліпшення тестів від @crynobone в https://github.com/laravel/framework/pull/55307
- [12.x] Додано генерики до типів масивів для граматик схем від @taka-oyama в https://github.com/laravel/framework/pull/55314
- [12.x] Виправлено відсутнє nullable для Query/Grammar::compileInsertGetId від @taka-oyama в https://github.com/laravel/framework/pull/55311
- [12.x] Додано
fromJson()до Collection від @DarkGhostHunter в https://github.com/laravel/framework/pull/55310 - [12.x] Виправлена робота
illuminate/databaseяк окремого пакету від @crynobone в https://github.com/laravel/framework/pull/55309 - Виправлено ключ масиву в InteractsWithInput від @AJenbo в https://github.com/laravel/framework/pull/55287
- [12.x] Виправлено підтримку додавання кастомних спостережуваних подій з трейтом від @willrowe в https://github.com/laravel/framework/pull/55286
- [12.x] Додано функцію автоматичного завантаження зв'язків (Eager Loading) від @litvinchuk в https://github.com/laravel/framework/pull/53655
- [12.x] Змінено PHPDoc для функцій Collection::chunkWhile, щоб підтримувати збереження ключів від @jsvdvis в https://github.com/laravel/framework/pull/55324
- [12.x] Введено Rule::anyOf() для валідації проти кількох наборів правил від @brianferri в https://github.com/laravel/framework/pull/55191