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

masteringlaravel logo
Laravel Code Review

Get expert guidance in a few days with a Laravel code review

Visit Laravel Code Review

The latest

View all →
Volker Dusch on the PHP RCE Vulnerabilities and Disclosure image

Volker Dusch on the PHP RCE Vulnerabilities and Disclosure

Read article
Decide with Jev: Turn AI Answers into Decisions with PHP Rules image

Decide with Jev: Turn AI Answers into Decisions with PHP Rules

Read article
Skuul: Open-Source School Management Built on Laravel image

Skuul: Open-Source School Management Built on Laravel

Read article
Laravel Read Replicas: Prevent Stale Reads After a Write image

Laravel Read Replicas: Prevent Stale Reads After a Write

Read article
Screenshot: Capture Images and PDFs with PHP and Laravel image

Screenshot: Capture Images and PDFs with PHP and Laravel

Read article
Reset Sticky Database Connections Between Laravel Queue Jobs image

Reset Sticky Database Connections Between Laravel Queue Jobs

Read article