Автоматичне завантаження зв'язків у Laravel 12.8

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 10 квітня, 2025
Laravel 12.8.0 пропонує ряд нововведень, серед яких автоматичне завантаження зв'язків та метод для створення колекції з JSON. Як ці зміни можуть спростити вашу роботу? Читайте далі, щоб дізнатися більше про нову функціональність Laravel

Команда 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