Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Data Laravel Package

spatie/laravel-data

Define rich, typed data objects once and use them for requests, validation, API resources/transformers, and TypeScript definitions. Create from arrays/requests/models, apply rules automatically, and transform only what’s needed with lazy properties.

View on GitHub
Deep Wiki
Context7
4.21.0

What's Changed

Full Changelog: https://github.com/spatie/laravel-data/compare/4.20.1...4.21.0

4.20.1
  • Fix an issue where the reflection dependency could not be resolved correctly
4.20.0
  • Laravel 13 support
  • Livewire 4 support
  • Dropped PHP 8.1 support
4.19.1

What's Changed

Full Changelog: https://github.com/spatie/laravel-data/compare/4.19.0...4.19.1

4.19.0

What's Changed

Full Changelog: https://github.com/spatie/laravel-data/compare/4.18.0...4.19.0

4.18.0

What's Changed

Full Changelog: https://github.com/spatie/laravel-data/compare/4.17.1...4.18.0

4.17.1

What's Changed

Full Changelog: https://github.com/spatie/laravel-data/compare/4.17.0...4.17.1

4.17.0

What's Changed

Breaking changes

Full Changelog: https://github.com/spatie/laravel-data/compare/4.16.1...4.17.0

4.16.1

What's Changed

Full Changelog: https://github.com/spatie/laravel-data/compare/4.16.0...4.16.1

4.16.0

What's Changed

Full Changelog: https://github.com/spatie/laravel-data/compare/4.15.3...4.16.0

4.15.3
  • Add support for only and except in enum rule

Full Changelog: https://github.com/spatie/laravel-data/compare/4.15.2...4.15.3

4.15.2
  • Fix: CannotCreateData exception when AutoWhenLoadedLazy relationship is not loaded (#1009)
  • Fix: Inertia deferred properties not being that flexible

Full Changelog: https://github.com/spatie/laravel-data/compare/4.15.1...4.15.2

4.14.1

What's Changed

Full Changelog: https://github.com/spatie/laravel-data/compare/4.14.0...4.14.1

4.14.0

If you're using cached versions of your data objects and don't clear this cache on deploy, now is the time since we've updated some internal structures.

  • Fix an issue where data classes could not be cached (a7d117e1224258a05c2d8e101928b6740a680a69)
  • Fix retrieval of property to work for Astrotomic/translatable (#883)
  • Refactored some internals for storing attribute information
  • Add dataClass to normalize exception message (#968)
  • Add Macroable Trait to Data Collection Classes (#971)
4.13.2

What's Changed

  • Fix an issue where specific Lazy classes won't be recognized

Full Changelog: https://github.com/spatie/laravel-data/compare/4.13.1...4.13.2

4.13.1

Allow Laravel 12

What's Changed

New Contributors

Full Changelog: https://github.com/spatie/laravel-data/compare/4.13.0...4.13.1

4.12.0

What a release! Probably to biggest minor release we've ever done!

Some cool highlights:

Disabling optional values

Optional values are great, but sometimes a null value is desirable from now on you can do the following:

class SongData extends Data {
    public function __construct(
        public string $title,
        public string $artist,
        public Optional|null|string $album,
    ) {
    }
}

SongData::factory()
    ->withoutOptionalValues()
    ->from(['title' => 'Never gonna give you up', 'artist' => 'Rick Astley']); // album will `null` instead of `Optional`




















Injecting property values

It was already possible to inject a Laravel route parameter when creating a data object, we've now extended this functionality quite a bit and also allow injecting dependencies from the container and the authenticated user.

class SongData extends Data {
    #[FromAuthenticatedUser]
    public UserData $user;
}




















Merging manual rules

In the past when the validation rules of a property were manually defined, the automatic validation rules for that property were omitted. From now on, you can define manual validation rules and merge them with the automatically generated validation rules:

```php
#[MergeValidationRules]
class SongData extends Data
{
    public function __construct(
        public string $title,
        public string $artist,
    ) {
    }

    public static function rules(): array
    {
        return [
            'title' => ['max:20'],
            'artist' => ['max:20'],
        ];
    }
}




















New property mappers:

We now ship by default a Uppercase and Lowercase mapper for mapping property names.

All changes:

Full Changelog: https://github.com/spatie/laravel-data/compare/4.11.1...4.12.0

4.11.1
  • Fix an issue where the cache structures command did not work if the directory did not exist (#892)
4.10.1
  • Fix an issue where optional default values would disable validation
4.10.0

It has been a fews weeks, a mostly bugfix release with one new feature, enjoy!

  • Fix an issue where required rules could not be combined with optional (#844)
  • Fix Livewire return type to make sure it can return everything in the data object (#836)
  • Fix issue where validation messages where ignored by collections nested in collections (#867)
  • Fix Resource to include Contextable data inteface (#868)
  • Stop NormalizedModel from initializing itself and try to lazy load properties when required (#870)
  • Passing an enum to caster handle without an error (#841)
  • Passing date objects to caster handle without an error (#842)
  • Allow setting a default mapping strategy (#846)
4.9.0
  • Move some interfaces around in order to avoid a circular chaos
4.8.2
  • Remove a circular dependency
4.81
  • Fix a missing dependency
4.8.0

What's Changed

Full Changelog: https://github.com/spatie/laravel-data/compare/4.7.2...4.8.0

4.7.2
  • Fix issue where an exception was not always thrown while it should (#809)
  • Solve an issue where an empty container with an iterable cast won't be cast (#810)
  • Fix Parsing of Optional Types Annotations in DataIterableAnnotation (#808)
  • Support TypeScript Hidden Properties (#820)
  • Fix issue where abstract eloquent casts were not encrypted(#828)
4.7.1

What's Changed

New Contributors

Full Changelog: https://github.com/spatie/laravel-data/compare/4.7.0...4.7.1

4.7.0

What's Changed

New Contributors

Full Changelog: https://github.com/spatie/laravel-data/compare/4.6.0...4.7.0

4.6.0

What's Changed

  • Add initial support for casting union types
  • Fix an issue with paginator includes not working
  • Fix consistency of After, AfterOrEqual, Before, BeforeOrEquals rules
  • Fix creation context issue (#749)
  • Fix an performance issue where when creating a data object from models, the attributes were always called
  • Add a #[LoadRelation] attribute which allows loading model relations when creating data objects on the fly

Full Changelog: https://github.com/spatie/laravel-data/compare/4.5.1...4.6.0

3.12.0

What's Changed

Full Changelog: https://github.com/spatie/laravel-data/compare/4.5.1...3.12.0

4.5.1
4.5.0

What's Changed

Full Changelog: https://github.com/spatie/laravel-data/compare/4.4.1...4.5.0

4.4.1

What's Changed

  • fix issue where DataCollection keys were missing in TypeScript by @rubenvanassche

Full Changelog: https://github.com/spatie/laravel-data/compare/4.4.0...4.4.1

4.4.0

What's Changed

Full Changelog: https://github.com/spatie/laravel-data/compare/4.3.2...4.4.0

4.3.2
4.3.1

What's Changed

Full Changelog: https://github.com/spatie/laravel-data/compare/4.3.0...4.3.1

4.3.0

What's Changed

Full Changelog: https://github.com/spatie/laravel-data/compare/4.2.0...4.3.0

4.2.0
3.11.2
  • fix: adds environment variable to disable structure caching (#645)
4.1.0
  • Fix an issue where the cache was queried too much
  • Move the creation process of object rules from constructor to getRule to fix issues with caching and typescript transformer
  • Laravel 11 support
4.0.2
  • Fixes issue where casts could not return null or an empty array
  • Prevent out of memory with multiple requests in a test (#665)
  • Allow passing null to collect and return an empty version of the defined output type
  • Fix templates for Laravel Idea plugin support (#666)
  • Fix an issue where the cache could not be disabled
4.0.1

Laravel-data 4.0.0 was released 5 hours ago, time for an update!

  • Add support for a collection cast
  • Make sure we check wether a value is Uncastable
  • Fix issue where creating a data object from multiple payloads wasn't always consistent
  • Allow disabling cache
  • Refactor PropertyRules
  • Fix issue where install on windows was impossible
  • Fix types for map and through (#640)
3.11.0
  • Add support for data structure caching #622
3.10.1
  • Make ValidationPath Stringable
  • Fix PHPStan
  • Improve performance when optional property exists (#612)
3.10.0

A fresh release after a month of vacation, enjoy!

  • Add ExcludeWith validation rule (#584)
  • Add DoesntEndWith and DoesntStartWith validation rules (#585)
  • Add MinDigits and MaxDigits validation rules (#586)
  • Add DataCollection reject() method (#593)
  • Add generic type for WithData trait (#597)
  • Fix issue where non set optional values were transformed (#602)
  • Fix issue where parameters passed to Laravel Collection methods would sometimes provide alternative results (issue: #607)
1.5.3
  • MimeTypes validation fix on v1 (#596)
3.9.2
  • Fix breaking compatibility #590
3.9.1
  • Add Declined and DeclinedIf validation attributes (#572)
  • Add MacAddress validation attribute (#573)
  • Add RequiredArrayKeys validation attribute (#574)
  • Support Arrayable when casting to DataCollection (#577)
  • Fetch attributes from parent classes to allow reusability (#581)
  • Fix issue where non-set optional values would be transformed
3.9.0
  • Fix an issue where computed values could not be set as null
  • Fix for no rules created on optional|nullable Data object and Collection (#532)
  • Add CustomValidationAttribute's
  • Copy partial trees when using array access on a collection
3.8.1
  • fix abstract json cast format
3.8.0
  • Add Hidden Attribute (#505)
  • Add Null value support for RequiredUnless Validation (#525)
  • Add abstract eloquent casts (#526)
3.7.1
  • fix target namespace when creating files with Laravel Idea (#497)
  • allow collection to be created passing null (#507)
  • add Ulid validation rule (#510) -add TARGET_PARAMETER to Attribute for improved Validation (#523)
3.7.0
  • Add support for better exception messages when parameters are missing
  • Fix default properties generating validation rules when not provided
  • Add last() method on DataCollection (#486)
  • Add new manual written present attribute rule always overwrites a generated required rule
  • Added the ability to create data files, casts, transformers and rules using Laravel Idea plugin #485
3.6.0
  • Add some config options to the make:data command (#449, #335)
1.5.2
  • Add laravel v10 support
3.5.1
3.5.0
  • Add support for computed values
  • Add merge method to Data Collections (#419)
  • Allow field references in same validation attribute
  • Generic return type of toResponse function (#437)
  • Only use validated data (#438)
  • Add missing constructor parameters to error message (#433)
3.4.4
  • Make Lazy Macroable
3.4.3
  • Update TypeScript Transformer with new closure lazy type
3.4.2
  • Add support for Lazy Closures which can be used with inertia
3.4.1
  • reverted the reverted #393 branch
3.4.0
  • Allow to fetch Lazy data properties in unified way (#403)
3.3.3
3.2.2
  • Fix issue when validating and creating a data object was impossible to use magic creation methods
  • Fix usage of properties' mapped output names in 'only', 'except', 'includes', and 'excludes' operations (#393)
  • Add some extra documentation
3.2.1
  • Introduce FormRequestNormalizer (#380)
  • Add support for models without all columns (#385)
3.2.0
  • Add benchmarks for testing data performance
  • Add some performance improvements for data creation and transformation
3.1.3
  • Performance improvements
3.1.2
  • Fix issue where promoted protected constructor parameters were seen as possible property canidates
  • Allow using closures within the with method (#372)
  • Add support for Validation Rule Contract in Rule rule (#362)
  • Allow laravel-data validation rules to be used in Laravel validator (#375)
3.1.1
  • Add WithCastable attribute (#349)
  • Quote non-standard object keys when transforming to Typescript (#367)
3.1.0
  • Allow filling props from route parameters (#341)
  • Better handing of custom regex validation rules(#342)
  • Fix types (#348)
  • Improve validation when strings are passed for nested data objects
  • Add FieldReference to Before and After Validation attribute (#345)
3.0.0
  • The validation logic is completely rewritten
  • Add support for nested nullable and optional data objects
  • Allow referencing other fields in validation attributes when the data is nested
  • Allow referencing url parameters (and even model properties) in validation attributes
  • Allow circular dependencies when validating data
  • Add support for nested validation messages and attributes
  • Package specific properties are renamed to avoid conflicts
  • Serialization logic updated to only serialize your properties
  • Prevent fatal error when passing a string containing only an integer to JSON Normalizer (#322)
  • Ignore leading ! in DateTimeInterfaceTransformer (#325)
  • Extend the make:data command to be more flexible (#335)
2.2.3
  • Add Laravel 10.x support (#331)
2.2.2
  • Add a way to prepend DataPipes to the pipeline (#305)
  • Better IDE completion (#307)
  • Make eloquent collection cast respect collection (#308)
2.2.1
  • fix support to return 201 status code in Json Responses (#291)
2.2.0
  • Add generic return type for DataCollection::toCollection (#290)
  • Improve ide.json completion (#294)
  • Pass in payload relative to the data object when generating rules (#264)
  • ignore phpstorm attributes when instantiating and add readonly property (#281)
2.1.0
  • Stop using custom pipeline when creating data magically from requests
  • set timezones in datetime casts (#287 )
2.0.16
  • add support for optional properties in TypeScript transformer (#153)
2.0.15
  • refactor test suite to Pest (#239)
  • update the docs
  • add a StudlyMapper
  • add better support for Livewire
2.0.14
  • accept 'float' as data type (#237)
  • fix typo in mime type validation rule(#243)
  • add support for enums in validation attributes
  • add support for withoutTrashed to exists validation attribute (#248)
  • add PHP 8.2 testing in GH actions
  • add ability to modify properties before the data pipeline (#247)
2.0.13
  • fix first and last page url are never null (#215)
  • add ability to statically retrieve a data models rules (#221)
  • improved pattern matching in DataCollectionAnnotationReader (#225)
  • add ExcludeWithout attribute rule (#230)
  • improve getValidationRules to also retrieve wildcard rules (#231)
  • return property with or without mapping the name (#199)
2.0.12
  • Improve pattern matching in DataCollectionAnnotationReader (#214)
  • Add ability to retrieve rules for a data object (#221)
2.0.11
  • Use generics with Data::collection (#213)
  • Improve pattern matching in DataCollectionAnnotationReader (#214)
  • Fix TypeScript Transformer paginated collections, first and last page url are never null (#215)
2.0.10
  • Add support for a JsonSerializer
  • Fix generic iterator definition for data collections
  • Fix validation of DataCollection objects not working as expected
2.0.9
  • Add support for timezone manipulation in casts and transformers (#200)
2.0.8
  • use AbstractCloner instead of reflection (#196)
2.0.7
  • Add var dumper caster (#195)
  • Allow direct pipeline call (#193)
  • Rename ArrayableNormalizer (#191)
  • Make normalizers configurable (#190)
2.0.6
  • Add cast lazy condition result to bool (#186)
  • Add conditional return types for collections (#184)
  • Fix windows tests
2.0.5
  • Fix validation rules not being used for data collections and objects
2.0.4
  • Add IDE completion support (#182)
2.0.3
  • Add support for invokable rules (#179)
2.0.2
  • more consistent use of transform through codebase for transforming collections and data
2.0.1
  • Add class defined partials (#164)
  • Use mapped property names in TypeScript (#154)
  • Add make:data command (#157)
  • Better support for overwritten rules
  • Add support for Lazy inertia props (#163)
  • Add support for array query parameters as partials (#162)
2.0.0

Version 2 of laravel-data is a complete overhaul, we've almost completely rewritten the package.

This is a (non-complete) list of the new features:

  • A DataPipeline
  • Data normalizers
  • Mappable property names
  • Wrapping of data in responses
  • only and except methods on Data and DataCollections
  • Multiple parameter magic methods
  • Optional properties
  • Split DataCollections
  • Better support for TypeScript Transformer
  • And a lot more ...
1.5.1
  • Fix optional parameters (#152)
  • Use protected properties and methods (#147 )
1.5.0
1.4.7
  • support $payload as a dependency in rules (#123)
1.4.6
  • Add Dependency Injection for rules, messages, and attributes methods (#114)
1.4.5
  • Add support for stdClass payload casting (#106)
1.4.4
  • use present validation rule instead of required for data collections
1.4.3
  • allow using default password config in password validation attribute (#94)
  • solve binding issues on Laravel Octane (#101)
  • fixes a bug where models nested by relation could not be created due to date casts
  • add a links array to the paginated response
  • stop execution of lazy::whenLoaded closure when the relation is null
1.4.2
  • fix for aborting value assignment after a false boolean (#80)
  • add a WithoutValidation attribute
  • allow transformers to target native types, data collections and data objects
1.4.1
  • Allow transformers to target Data and DataCollections
1.4.0
  • removes checks for built in types and isBuiltIn from DataProperty
  • add better support for defaults
1.3.3
1.3.2
  • add support for json_encode to Data objects
  • add support for json_encode to DataCollection objects
1.3.1
  • add basic support for intersection types
  • allow casting of built in PHP types
  • add support for inferring enum rules
  • fix an issue where an Enum validation attribute would not work
1.2.5
  • fixes the RequiredRuleResolver to support custom rules like Enum
  • add an Enum validation rule attribute
1.2.4
  • rename the authorized method to authorize
  • disable the behavior were excluded conditional properties still could be included
1.2.3
  • fix return type notice message
1.2.1
  • fixes an issue where data object could not be created when it had lazy nested data object
  • fixes windows test suite
1.2.0
  • when creating data objects, we now will always run validation when a Request object is given not only when a data object is injected
  • removal of DataFromRequestResolver
  • added DataValidatorResolver
1.1.0
  • change data property types collection checking procedure
  • move spatie/test-time dependency to require-dev
  • expand support for nested data object creation (#19)
  • expand support for annotating data collections
1.0.4
  • revert allow ignoring with a closure within a unique rule
1.0.3
  • allow ignoring with a closure within a unique rule
1.0.2
  • add a WithData trait for quicker getting data from objects
1.0.1
  • fix required rules being added when not allowed
1.0.0
  • initial release
What's
4.0.0
  • Allow arrays, Collections, Paginators, ... to be used as DataCollections
  • Add support for magically creating data collections
  • Rewritten transformation system with respect to includeable properties
  • Addition of collect method
  • Removal of collection method
  • Add support for using Laravel Model attributes as data properties
  • Allow creating data objects using from without parameters
  • Add support for a Dto and Resource object
  • It is now a lot easier to validate all the payloads added to laravel-data
  • Added contexts to the creation and transformation process
  • Allow creating a data object or collection using a factory
  • Speed up the process of creating and transforming data objects
  • Add support for BNF syntax
  • Laravel 10 requirement
  • Rewritten docs

Some more "internal" changes

  • Restructured tests for the future we have ahead
  • The Type system was completely rewritten, allowing for a better performance and more flexibility in the future
  • Benchmarks added to make data even faster
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
davejamesmiller/laravel-breadcrumbs
artisanry/parsedown
christhompsontldr/phpsdk
enqueue/dsn
bunny/bunny
enqueue/test
enqueue/null
enqueue/amqp-tools
milesj/emojibase
bower-asset/punycode
bower-asset/inputmask
bower-asset/jquery
bower-asset/yii2-pjax
laravel/nova
spatie/laravel-mailcoach
spatie/laravel-superseeder
laravel/liferaft
nst/json-test-suite
danielmiessler/sec-lists
jackalope/jackalope-transport