Mastering Fluent Logic and Object Casting in Laravel 12.10
Overview of Laravel 12.10 Enhancements
introduces two substantial quality-of-life improvements that streamline how developers handle data flow and model casting. The integration of the Conditionable trait into objects and the advanced mapping capabilities for the AsCollection cast transform messy conditional logic into elegant, readable chains. These updates allow you to map database JSON columns directly into a collection of specific Data Transfer Objects (DTOs) with minimal boilerplate.
Prerequisites
To follow this guide, you should be comfortable with and have a baseline understanding of models. Familiarity with and basic class interfaces like Arrayable or JsonSerializable will help you implement the custom object casting demonstrated below.
Key Libraries & Tools
- Laravel 12.10 Framework: The primary ecosystem providing these new features.
- Illuminate\Support\Fluent: A class used for fluent data access, now featuring the
Conditionabletrait. - Eloquent Casting: The mechanism that converts attributes between database and application formats.
Fluent Conditional Logic
Previously, adding conditional logic to a chain required breaking the chain or using external if-statements. Now, thanks to the Conditionable trait, you can use the when() method directly:
$data = new Fluent(['name' => 'Dev', 'status' => 'active']);
$data->when($isAdmin, function ($fluent) {
return $fluent->add(['role' => 'administrator']);
});
This keeps your code cohesive and eliminates the visual clutter of broken method chains.
Advanced Collection Object Casting
The AsCollection cast has evolved to support automatic mapping to specific classes. Instead of receiving a collection of generic arrays, you can now define a collection of strongly typed objects directly in your model.
Mapping to a Constructor
If your class accepts an array of data in its constructor, use the asCollectionOf method:
protected function casts(): array
{
return [
'options' => AsCollection::using(Option::class),
];
}
Mapping via Static Factory
For more complex DTOs where properties are passed individually to the constructor, you can specify a static factory method like fromArray:
protected function casts(): array
{
return [
'colors' => AsCollection::using(Color::class, 'fromArray'),
];
}
Syntax Notes
- Interface Requirements: Any class used in
asCollectionOfmust implementArrayableandJsonSerializableto ensure can convert the data back into JSON when saving to the database. - Fluent Trait: The
when()andunless()methods are now available on all instances.
Tips & Gotchas
When using custom classes for collection casting, ensure your fromArray or constructor logic is robust against missing keys in the database JSON. Always type-hint your collection items in your model's docblocks to help IDEs recognize the specific class instances within the collection.
- 33%路 libraries
- 22%路 products
- 11%路 libraries
- 11%路 libraries
- 11%路 people
- 11%路 languages

Conditional Fluent Methods & Collection Object Casting in Laravel 12.10
WatchLaravel // 6:57
The official YouTube channel of Laravel, the clean stack for Artisans and agents. We will update you on what's new in the world of Laravel, from the framework to our products Cloud, Forge, and Nightwatch.