Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/spatie/laravel-data/llms.txt

Use this file to discover all available pages before exploring further.

Laravel Data provides validation attributes that correspond to Laravel’s validation rules. Use these attributes on data properties to automatically generate validation rules.

String Validation

Docs
#[Alpha]
public string $name;
Docs
#[AlphaDash]
public string $username;
Docs
#[AlphaNumeric]
public string $code;
Docs
#[StringType]
public string $text;
Docs
#[Lowercase]
public string $email;
Docs
#[Uppercase]
public string $countryCode;

Numeric Validation

Docs
#[IntegerType]
public int $count;
Docs
#[Numeric]
public string|int|float $amount;
Docs
#[Min(20)]
public int $age;
Docs
#[Max(100)]
public int $percentage;
Docs
#[Between(3.14, 42)]
public float $value;
Docs
#[Digits(10)]
public int $phoneNumber;
Docs
#[DigitsBetween(2, 10)]
public int $code;
Docs
#[MinDigits(2)]
public int $value;
Docs
#[MaxDigits(10)]
public int $value;
Docs
#[MultipleOf(3)]
public int $quantity;

Date Validation

Docs
#[Date]
public Carbon $date;
Docs
#[DateFormat('d-m-Y')]
public Carbon $date;

#[DateFormat(['Y-m-d', 'Y-m-d H:i:s'])]
public Carbon $date;
Docs
#[DateEquals('tomorrow')]
public Carbon $date;

#[DateEquals(Carbon::yesterday())]
public Carbon $date;
Docs
#[After('tomorrow')]
public Carbon $date;

#[After(Carbon::yesterday())]
public Carbon $date;

#[After(new FieldReference('start_date'))]
public Carbon $endDate;
Docs
#[AfterOrEqual('tomorrow')]
public Carbon $date;

#[AfterOrEqual(new FieldReference('start_date'))]
public Carbon $endDate;
Docs
#[Before('tomorrow')]
public Carbon $date;

#[Before(new FieldReference('end_date'))]
public Carbon $startDate;
Docs
#[BeforeOrEqual('tomorrow')]
public Carbon $date;

#[BeforeOrEqual(new FieldReference('end_date'))]
public Carbon $startDate;

Boolean & Acceptance

Docs
#[BooleanType]
public bool $active;
Docs
#[Accepted]
public bool $termsAccepted;
Docs
#[AcceptedIf('other_field', 'equals_this')]
public bool $confirmation;
Docs
#[Declined]
public bool $optOut;
Docs
#[DeclinedIf('other_field', 'equals_this')]
public bool $optOut;

Array Validation

Docs
#[ArrayType]
public array $items;

#[ArrayType(['valid_key', 'other_valid_key'])]
public array $items;

#[ArrayType('valid_key', 'other_valid_key')]
public array $items;
Docs
#[ListType]
public array $items;
Docs
#[RequiredArrayKeys('a')]
public array $items;

#[RequiredArrayKeys(['a', 'b'])]
public array $items;

#[RequiredArrayKeys('a', 'b')]
public array $items;
Docs
#[Distinct]
public string $value;

#[Distinct(Distinct::Strict)]
public string $value;

#[Distinct(Distinct::IgnoreCase)]
public string $value;

String Patterns

Docs
#[StartsWith('a')]
public string $value;

#[StartsWith(['a', 'b'])]
public string $value;

#[StartsWith('a', 'b')]
public string $value;
Docs
#[EndsWith('a')]
public string $value;

#[EndsWith(['a', 'b'])]
public string $value;
Docs
#[DoesntStartWith('a')]
public string $value;

#[DoesntStartWith(['a', 'b'])]
public string $value;
Docs
#[DoesntEndWith('a')]
public string $value;
Docs
#[Regex('/^.+$/i')]
public string $value;
Docs
#[NotRegex('/^.+$/i')]
public string $value;

Email & URL

Docs
#[Email]
public string $email;

#[Email(Email::RfcValidation)]
public string $email;

#[Email([Email::RfcValidation, Email::DnsCheckValidation])]
public string $email;
Docs
#[Url]
public string $website;

#[Url(['http', 'https'])]
public string $website;
Docs
#[ActiveUrl]
public string $website;

IP & Network

Docs
#[IP]
public string $ipAddress;
Docs
#[IPv4]
public string $ipAddress;
Docs
#[IPv6]
public string $ipAddress;
Docs
#[MacAddress]
public string $macAddress;

Database

Docs
#[Exists('users')]
public string $userId;

#[Exists(User::class)]
public string $userId;

#[Exists('users', 'email')]
public string $email;

#[Exists('users', 'email', connection: 'tenant')]
public string $email;

#[Exists('users', 'email', withoutTrashed: true)]
public string $email;
Docs
#[Unique('users')]
public string $email;

#[Unique(User::class)]
public string $email;

#[Unique('users', 'email')]
public string $email;

#[Unique('users', connection: 'tenant')]
public string $email;

#[Unique('users', withoutTrashed: true)]
public string $email;

#[Unique('users', ignore: 5)]
public string $email;

#[Unique('users', ignore: new AuthenticatedUserReference())]
public string $email;

#[Unique('posts', ignore: new RouteParameterReference('post'))]
public string $slug;

File Validation

Docs
#[File]
public UploadedFile $document;
Docs
#[Image]
public UploadedFile $photo;
Docs
#[Mimes('jpg')]
public UploadedFile $image;

#[Mimes(['jpg', 'png'])]
public UploadedFile $image;

#[Mimes('jpg', 'png')]
public UploadedFile $image;
Docs
#[MimeTypes('video/quicktime')]
public UploadedFile $video;

#[MimeTypes(['video/quicktime', 'video/avi'])]
public UploadedFile $video;
Docs
#[Dimensions(ratio: 1.5)]
public UploadedFile $image;

#[Dimensions(maxWidth: 100, maxHeight: 100)]
public UploadedFile $image;

Field Relationships

Docs
#[Required]
public string $name;
Docs
#[RequiredIf('other_field', 'value')]
public ?string $conditional;

#[RequiredIf('other_field', ['value', 'another_value'])]
public ?string $conditional;
Docs
#[RequiredUnless('other_field', 'value')]
public ?string $conditional;
Docs
#[RequiredWith('other_field')]
public ?string $conditional;

#[RequiredWith(['other_field', 'another_field'])]
public ?string $conditional;
Docs
#[RequiredWithAll(['other_field', 'another_field'])]
public ?string $conditional;
Docs
#[RequiredWithout('other_field')]
public ?string $conditional;
Docs
#[RequiredWithoutAll(['other_field', 'another_field'])]
public ?string $conditional;
Docs
#[Same('other_field')]
public string $confirmation;
Docs
#[Different('other_field')]
public string $value;
Docs
#[Confirmed]
public string $password;

Advanced

Docs
#[Enum(ChannelType::class)]
public string $channel;

#[Enum(ChannelType::class, only: [ChannelType::Email])]
public string $channel;

#[Enum(ChannelType::class, except: [ChannelType::Email])]
public string $channel;
Docs
#[Uuid]
public string $id;
Docs
#[Ulid]
public string $id;
Docs
#[Json]
public string $metadata;
Docs
#[TimeZone]
public string $timezone;
Docs
#[Password(min: 12, letters: true, mixedCase: true, numbers: false, symbols: false, uncompromised: true, uncompromisedThreshold: 0)]
public string $password;
Docs
#[CurrentPassword]
public string $currentPassword;

#[CurrentPassword('api')]
public string $currentPassword;

Special Rules

Define custom validation rules:
#[Rule('string|uuid')]
public string $id;

#[Rule(['string','uuid'])]
public string $id;
Docs
#[Nullable]
public ?string $optionalField;
Docs
#[Sometimes]
public string $value;
Docs
#[Bail]
public string $value;
Docs
#[Filled]
public string $value;
Docs
#[Present]
public string $value;

Comparison

Docs
#[GreaterThan('other_field')]
public int $value;
Docs
#[GreaterThanOrEqualTo('other_field')]
public int $value;
Docs
#[LessThan('other_field')]
public int $value;
Docs
#[LessThanOrEqualTo('other_field')]
public int $value;
Docs
#[Size(10)]
public string $value;

Lists & Values

Docs
#[In([1, 2, 3, 'a', 'b'])]
public mixed $value;

#[In(1, 2, 3, 'a', 'b')]
public mixed $value;
Docs
#[NotIn([1, 2, 3, 'a', 'b'])]
public mixed $value;
Docs
#[InArray('other_field')]
public string $value;

Prohibition

Docs
#[Prohibited]
public ?string $value;
Docs
#[ProhibitedIf('other_field', 'has_value')]
public ?string $value;

#[ProhibitedIf('other_field', ['has_value', 'or_this_value'])]
public ?string $value;
Docs
#[ProhibitedUnless('other_field', 'has_value')]
public ?string $value;
Docs
#[Prohibits('other_field')]
public ?string $value;

#[Prohibits(['other_field', 'another_field'])]
public ?string $value;

Exclusion

At the moment the data is not yet excluded due to technical reasons. Version 4 should fix this.
Docs
#[ExcludeIf('other_field', 'has_value')]
public string $value;
Docs
#[ExcludeUnless('other_field', 'has_value')]
public string $value;
Docs
#[ExcludeWith('other_field')]
public string $value;
Docs
#[ExcludeWithout('other_field')]
public string $value;

Build docs developers (and LLMs) love