Laravel Packages

Create Rich Data Objects in Laravel

Published
Create Rich Data Objects in Laravel image

Laravel Data is a package by Spatie that enables the creation of rich data objects which can be used for form requests, data transformers, and more.

The API is simple for data objects but unlocks powerful featured by extending the package's Data class:

use Spatie\LaravelData\Data;
 
class SongData extends Data
{
public function __construct(
public string $title,
public string $artist,
) {
}
}

According to the documentation, extending the package's Data class gives you valuable features for working with data across various aspects of Laravel:

  • Automatically transforming data objects into resources (like the Laravel API resources)
  • Transform only the requested parts of data objects with lazy properties
  • Automatically creating data objects from request data and validating them
  • Automatically resolve validation rules for properties within a data object
  • Make it possible to construct a data object from any type you want
  • Add support for automatically validating data objects when creating them
  • Generate TypeScript definitions from your data objects you can use on the frontend
  • Save data objects as properties of an Eloquent model
  • And a lot more ...

Here's an example from the documentation of creating a data object from an Eloquent model:

// Create a SongData instance from a model
SongData::from(Song::firstOrFail($id));
 
// Create data objects, that could possibly be null
SongData::optional(null); // returns null

The Laravel Data package will find the required properties from the model and use them to construct this data object.

A benefit of using this package is that you don't have to write the same properties in multiple places, such as a resource, a data transfer object, and request validation.

The Laravel data package also includes flexible and advanced features:

  • Eloquent casting
  • Transform data objects to TypeScript definitions
  • Casts — transform values into complex types
  • Transformers — transform complex values into simple types
  • Validation Rule Inferring
  • Data Object validation attributes using PHP 8.0 attributes

You can learn more about this package, get full installation instructions, and view the source code on GitHub. Also, the author of this package, Ruben Van Assche, wrote about how to Avoid describing your data multiple times in a Laravel app using laravel-data.

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 →
Securing Filament plugins with Plumb image

Securing Filament plugins with Plumb

Read article
LayaPHP: Self-Hosted Text Classification for PHP and Laravel image

LayaPHP: Self-Hosted Text Classification for PHP and Laravel

Read article
WhenMounted and BigInt Props in Inertia.js v3.8 image

WhenMounted and BigInt Props in Inertia.js v3.8

Read article
Postcodes for Laravel: GB Postcode Lookup and Geography Data image

Postcodes for Laravel: GB Postcode Lookup and Geography Data

Read article
Laravel 14 Adds a defaults() Method to Eloquent Models image

Laravel 14 Adds a defaults() Method to Eloquent Models

Read article
Laravel AI SDK and Laravel MCP Security Fixes: Update Now image

Laravel AI SDK and Laravel MCP Security Fixes: Update Now

Read article