AsArrayObject and AsCollection Custom Casts Added in Laravel 8.28

Published on by

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.

Cube

Laravel Newsletter

Join 40k+ other developers and never miss out on new tips, tutorials, and more.

image
No Compromises

Join the Mastering Laravel community to level up your skills and get trusted advice

Visit No Compromises

Laravel Forge

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

Laravel Forge

Tinkerwell

The must-have code runner for Laravel developers. Tinker with AI, autocompletion and instant feedback on local and production environments.

Tinkerwell
No Compromises logo

No Compromises

Joel and Aaron, the two seasoned devs from the No Compromises podcast, are now available to hire for your Laravel project. ⬧ Flat rate of $7500/mo. ⬧ No lengthy sales process. ⬧ No contracts. ⬧ 100% money back guarantee.

No Compromises

Kirschbaum

Providing innovation and stability to ensure your web application succeeds.

Kirschbaum
Shift logo

Shift

Running an old Laravel version? Instant, automated Laravel upgrades and code modernization to keep your applications fresh.

Shift

Bacancy

Supercharge your project with a seasoned Laravel developer with 4-6 years of experience for just $2500/month. Get 160 hours of dedicated expertise & a risk-free 15-day trial. Schedule a call now!

Bacancy

Lucky Media

Bespoke software solutions built for your business. We ♥ Laravel

Lucky Media

Lunar: Laravel E-Commerce

E-Commerce for Laravel. An open-source package that brings the power of modern headless e-commerce functionality to Laravel.

Lunar: Laravel E-Commerce

LaraJobs

The official Laravel job board

LaraJobs

Larafast: Laravel SaaS Starter Kit

Larafast is a Laravel SaaS Starter Kit with ready-to-go features for Payments, Auth, Admin, Blog, SEO, and beautiful themes. Available with Vue and Livewire stacks.

Larafast: Laravel SaaS Starter Kit

SaaSykit: Laravel SaaS Starter Kit

SaaSykit is a Laravel SaaS Starter Kit that comes with all features required to run a modern SaaS. Payments, Beautiful Checkout, Admin Panel, User dashboard, Auth, Ready Components, Stats, Blog, Docs and more.

SaaSykit: Laravel SaaS Starter Kit

Rector

Your partner for seamless Laravel upgrades, cutting costs, and accelerating innovation for successful companies

Rector

The latest

View all →

Backpack turns 8 years old, celebrates with 40% discount

Read article

Create a DateTime from a Timestamp With this New Method Coming to PHP 8.4

Read article

Neovim Plugin to for Navigating Laravel and Livewire Components

Read article

Laravel Herd v1.7 is out with updates to the dump UI

Read article

Share Error Package for Laravel's New Exception Page

Read article

Sentry and Laravel announce a new partnership

Read article