News

AsArrayObject and AsCollection Custom Casts Added in Laravel 8.28

Published
AsArrayObject and AsCollection Custom Casts Added in Laravel 8.28 image

Release updates

Never miss a Laravel release

Get an email whenever a new Laravel release lands.

With the release of Laravel 8.28 this week, Taylor Otwell contributed two new custom cast types: AsArrayObject and AsCollection. ArrayObject has some advantages over the existing casts for JSON and array data.

The pull request description has excellent details to get you up to speed with what these casts bring to Laravel 8:

Of course, Laravel already includes an ability to cast a JSON / TEXT column that contains JSON to an array or collection like so:

$casts = ['options' => 'array'];

However, this does have some downsides. First, the following code is impossible using the simple array cast:

$user = User::find(1);
$user->options['foo'] = 'bar';
$user->save();

Many developers probably expect this to work, but it doesn't. It is impossible to mutate a specific property of the primitive array returned by this cast. You must mutate the entire array:

$user = User::find(1);
$user->options = ['foo' => 'bar'];
$user->save();

However, these new casts utilize Eloquent's custom cast feature, which implements more intelligent management and caching of objects. The AsArrayObject cast will cast the underlying JSON string to a PHP ArrayObject instance. This class is included in the standard library of PHP and allows an object to behave like an array. Such an approach makes the following possible:

// Within model...
$casts = ['options' => AsArrayObject::class];
 
// Manipulating the options...
$user = User::find(1);
$user->options['foo']['bar'] = 'baz';
$user->save();
 
// You can't use ArrayObject in functions like array_map
// You can cast to an array or collection from ArrayObject
$user->options->toArray();
$user->options->collect();

Learn More

I'd recommend checking out Pull Request #36245 for details on the implementation. Read the PR description—it does an excellent job explaining the current state of Laravel casts for array data and the benefits of the new ArrayObject and Collection casts. The PHP documentation is an excellent resource to learn more about the built-in ArrayObject class (introduced in PHP 5), which allows objects to work as arrays.

Paul Redmond photo

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

Sponsored

acquaintsoft logo
Acquaint Softtech

Hire Laravel developers with AI expertise at $20/hr. Get started in 48 hours.

Visit Acquaint Softtech

The latest

View all →
Statamic Mailables Viewer Previews Laravel Emails in the Control Panel image

Statamic Mailables Viewer Previews Laravel Emails in the Control Panel

Read article
Laravel Tackle: Run an AI Coding Agent in Your Laravel App image

Laravel Tackle: Run an AI Coding Agent in Your Laravel App

Read article
Queue::forward(): Reroute Laravel Queues in One Place image

Queue::forward(): Reroute Laravel Queues in One Place

Read article
Laravel Read-Through Filesystem: Lazy Storage Migration image

Laravel Read-Through Filesystem: Lazy Storage Migration

Read article
Read-Through Disks and Debounced Listeners in Laravel 13.26 image

Read-Through Disks and Debounced Listeners in Laravel 13.26

Read article
Lerd: A Free, Open Source Herd Alternative for Linux and macOS image

Lerd: A Free, Open Source Herd Alternative for Linux and macOS

Read article