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 →
Building EasyReply: How We Used Laravel to Unify Customer Support image

Building EasyReply: How We Used Laravel to Unify Customer Support

Read article
PostgreSQL Monitoring and Schema Linting for Laravel with Vacuum image

PostgreSQL Monitoring and Schema Linting for Laravel with Vacuum

Read article
PayZephyr: One Payment API for Stripe, Paystack, and PayPal image

PayZephyr: One Payment API for Stripe, Paystack, and PayPal

Read article
Bifrost Turns One With AI Builds and New Workflows image

Bifrost Turns One With AI Builds and New Workflows

Read article
Preview Blade Templates in macOS Finder with Quick Blade image

Preview Blade Templates in macOS Finder with Quick Blade

Read article
Artisan Debugging Commands in Laravel Telescope 5.24.0 image

Artisan Debugging Commands in Laravel Telescope 5.24.0

Read article