News

Map Eloquent Attributes into an Object Using the Collection Cast in Laravel 12.10

Published
Map Eloquent Attributes into an Object Using the Collection Cast in Laravel 12.10 image

Release updates

Never miss a Laravel release

Get an email whenever a new Laravel release lands.

The Laravel team released v12.10.0, which includes mapping Eloquent attributes using the collection cast into a specific object, checking nested relationships with relationLoaded(), Arr::dot() performance improvements, and more:

Map Eloquent Attributes into other Objects

@DarkGhostHunter contributed the ability to map an Eloquent attribute into a given class using the AsCollection::of() method:

use App\ValueObjects\Option;
use Illuminate\Database\Eloquent\Casts\AsCollection;
 
protected function casts(): array
{
return [
'options' => AsCollection::of(Option::class)
];
}
 
// Same as
Collection::make($this->attributes['options'])->mapInto(Option::class);

These objects should implement Laravel's Arrayable contract and PHP's JsonSerializable interface. See the Eloquent documentation for more details.

Add the Conditionable Trait to Fluent

Michael Nabil contributed the Conditionable trait to the Fluent support class, providing an expressive way to conditionally modify values in a fluent instance:

// Before
$data = Fluent::make([
'name' => 'Michael Nabil',
'developer' => true,
'posts' => 25,
]);
 
if (auth()->isAdmin()) {
$data = $data->set('role', 'admin');
} else {
$data = $data->forget('posts');
}
 
// After
$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');
});

Improved Arr::dot() Performance

@cyppe contributed performance improvements to the Arr::dot() method with improvements of speed up to 150-300x on large arrays:

This PR optimizes the Arr::dot() method, replacing the recursive implementation with a closure-based iterative approach. The optimization significantly improves performance when flattening large nested arrays, which is particularly beneficial for Laravel's validator when processing large datasets.

See Pull Request #55495 for details and an explanation of this update.

Check Nested Relations with relationLoaded()

Before Laravel 12.10, the relationLoaded() method only checks single-level relations of a model. In this release, Mahesh Perera contributed the ability to check nested relations with the relationLoaded() method:

$user->load('posts.comments');
 
// Previously
$user->relationLoaded('posts'); // true
$user->relationLoaded('posts.comments'); // false
 
// Now
$user->relationLoaded('posts'); // true
$user->relationLoaded('posts.comments'); // true

Release notes

You can see the complete list of new features and updates below and the diff between 12.9.0 and 12.10.0 on GitHub. The following release notes are directly from the changelog:

v12.10.0

Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article