Перетворення атрибутів Eloquent на об'єкт за допомогою кастування колекції в Laravel 12.10

Перекладено ШІ 0 Laravel News 24 квітня, 2025

Оновлення Laravel до версії 12.10.0 приносить вражаючі нововведення, серед яких можливість мапування атрибутів Eloquent в об'єкти, покращення продуктивності методу Arr::dot() та додавання умовного трейту до Fluent. Цікаво, як ці зміни можуть спростити вашу роботу з фреймворком? Читайте далі, щоб дізнатися більше про всі оновлення!

Команда Laravel випустила версію v12.10.0, яка містить оновлення, зокрема мапування атрибутів Eloquent за допомогою колекції до конкретного об'єкта, перевірку вкладених зв'язків із методом relationLoaded(), поліпшення продуктивності Arr::dot() та інші новинки:

# Мапування атрибутів Eloquent до інших об'єктів

@DarkGhostHunter додав можливість мапування атрибута Eloquent до заданого класу за допомогою методу AsCollection::of():

use App\ValueObjects\Option;
use Illuminate\Database\Eloquent\Casts\AsCollection;
 
protected function casts(): array
{
    return [
        'options' => AsCollection::of(Option::class)
    ];
}
 
// Аналогічно
Collection::make($this->attributes['options'])->mapInto(Option::class);

Ці об'єкти повинні реалізовувати контракт Arrayable Laravel і інтерфейс JsonSerializable PHP. Деталі можна знайти в документації Eloquent.

# Додано трейтер Conditionable до Fluent

Michael Nabil додав трейтер Conditionable до класу Fluent, що дозволяє виразно модифікувати значення в екземплярі:

// До
$data = Fluent::make([
    'name' => 'Michael Nabil',
    'developer' => true,
    'posts' => 25,
]);
 
if (auth()->isAdmin()) {
    $data = $data->set('role', 'admin');
} else {
    $data = $data->forget('posts');
}
 
// Після
$data = Fluent::make([
    'name' => 'Michael Nabil',
    'developer' => true,
    'posts' => 25,
])->when(auth()->isAdmin(), function (Fluent $input) {
    return $input->set('role', 'admin');
})->unless(auth()->isAdmin(), function (Fluent $input) {
    return $input->forget('posts');
});

# Поліпшена продуктивність Arr::dot()

@cyppe вніс поліпшення продуктивності для методу Arr::dot(), що дозволяє підвищити швидкість виконання в 150-300 разів для великих масивів:

Цей PR оптимізує метод Arr::dot(), замінюючи рекурсивну реалізацію на ітераційний підхід на основі замикань. Оптимізація значно покращує продуктивність при сплющуванні великих вкладених масивів, що особливо корисно для валідатора Laravel при обробці великих наборів даних.

Деталі ви можете знайти в Pull Request #55495.

# Перевірка вкладених зв'язків із relationLoaded()

До версії Laravel 12.10, метод relationLoaded() перевіряв тільки одноуровневі зв'язки моделі. У цьому релізі Mahesh Perera додав можливість перевірки вкладених зв'язків:

$user->load('posts.comments');
 
// Раніше
$user->relationLoaded('posts'); // true
$user->relationLoaded('posts.comments'); // false
 
// Тепер
$user->relationLoaded('posts'); // true
$user->relationLoaded('posts.comments'); // true

# Примітки до випуску

Повний список нових функцій та оновлень ви можете переглянути нижче, а також порівняти версії 12.9.0 та 12.10.0 на GitHub. Примітки до випуску взято з чангелогу:

# v12.10.0

Популярні

Інше, що варто прочитати

53 Оновлено 02 червня, 2026

Усе, що нам відомо про Livewire 4

Нова версія Livewire 4, представленої Келебом Порзіо на Laracon US 2025, обіцяє значні покращення у швидкості та організації компонентів. Які з інноваційних функцій підкорять ваше серце? Читайте далі, щоб дізнатися більше про те, як Livewire 4 полегшить вашу роботу

10 Оновлено 02 червня, 2026

Генерація документації в Laravel за допомогою штучного інтелекту

Docudoodle — це потужний пакет для генерації документації в Laravel, який допомагає легко аналізувати вашу кодову базу та створювати документацію за допомогою обраного вами AI. Чи готові ви дізнатися, як цей інструмент може спростити вашу роботу з документуванням коду? Читайте далі!

21 Оновлено 02 червня, 2026

Створення MCP-серверів на PHP

Модельний контекстний протокол (MCP) відкриває нові горизонти в інтеграції AI-додатків з PHP. Дізнайтеся, як легко створити сервер, що відповідає MCP, та які можливості відкриваються для вашого проєкту