Команда 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();
@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);
Філіп Ієцці реалізував методи 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. Примітки про випуск безпосередньо з журналу змін:
HasOneOrMany
від @onlime в https://github.com/laravel/framework/pull/55262fromJson()
до Collection від @DarkGhostHunter в https://github.com/laravel/framework/pull/55310illuminate/database
як окремого пакету від @crynobone в https://github.com/laravel/framework/pull/55309