Overview of Laravel 12.10 Enhancements Laravel 12.10 introduces two substantial quality-of-life improvements that streamline how developers handle data flow and model casting. The integration of the **Conditionable** trait into Fluent 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 PHP 8.2+ and have a baseline understanding of Eloquent models. Familiarity with Laravel Collections 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 `Conditionable` trait. * **Eloquent Casting**: The mechanism that converts attributes between database and application formats. Fluent Conditional Logic Previously, adding conditional logic to a Fluent chain required breaking the chain or using external if-statements. Now, thanks to the `Conditionable` trait, you can use the `when()` method directly: ```php $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: ```php 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`: ```php protected function casts(): array { return [ 'colors' => AsCollection::using(Color::class, 'fromArray'), ]; } ``` Syntax Notes * **Interface Requirements**: Any class used in `asCollectionOf` must implement `Arrayable` and `JsonSerializable` to ensure Laravel can convert the data back into JSON when saving to the database. * **Fluent Trait**: The `when()` and `unless()` methods are now available on all Fluent 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.
Fluent
Libraries
May 2025 • 1 videos
High activity month for Fluent. Laravel among the most active voices, with 1 videos across 1 sources.
May 2025
- May 7, 2025