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

laravelcloud logo
Laravel Cloud

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

Visit Laravel Cloud

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article