Команда Laravel випустила версію v12.10.0, яка містить оновлення, зокрема мапування атрибутів Eloquent за допомогою колекції до конкретного об'єкта, перевірку вкладених зв'язків із методом relationLoaded()
, поліпшення продуктивності Arr::dot()
та інші новинки:
@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.
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');
});
@cyppe вніс поліпшення продуктивності для методу Arr::dot()
, що дозволяє підвищити швидкість виконання в 150-300 разів для великих масивів:
Цей PR оптимізує метод Arr::dot(), замінюючи рекурсивну реалізацію на ітераційний підхід на основі замикань. Оптимізація значно покращує продуктивність при сплющуванні великих вкладених масивів, що особливо корисно для валідатора Laravel при обробці великих наборів даних.
Деталі ви можете знайти в Pull Request #55495.
До версії 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. Примітки до випуску взято з чангелогу:
@use
без лапок від @osbre у https://github.com/laravel/framework/pull/55462Conditionable
до Fluent
від @michaelnabil230 у https://github.com/laravel/framework/pull/55455setTags
для нових подій скидання кешу від @erikn69 у https://github.com/laravel/framework/pull/55405AsCollection
для мапування елементів в об'єкти або інші значення від @DarkGhostHunter у https://github.com/laravel/framework/pull/55383@use
від @osbre у https://github.com/laravel/framework/pull/55461CacheBasedSessionHandler
від @imanghafoori1 у https://github.com/laravel/framework/pull/55487FileSessionHandler
від @imanghafoori1 у https://github.com/laravel/framework/pull/55484DatabaseSessionHandler
від @imanghafoori1 у https://github.com/laravel/framework/pull/55485relationLoaded
від @tmsperera у https://github.com/laravel/framework/pull/55471Migrator
з назви класу від @cosmastech у https://github.com/laravel/framework/pull/55501