PHPackages                             dazza-dev/laravel-batch-validation - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Validation &amp; Sanitization](/categories/validation)
4. /
5. dazza-dev/laravel-batch-validation

ActiveLibrary[Validation &amp; Sanitization](/categories/validation)

dazza-dev/laravel-batch-validation
==================================

Batch validate arrays in Laravel and optimize database unique rules using whereIn to avoid N+1 query issues.

v2.2.0(2w ago)21966↑34.4%1MITPHPPHP &gt;=8.2

Since May 28Pushed 2w ago1 watchersCompare

[ Source](https://github.com/dazza-dev/Laravel-Batch-Validation)[ Packagist](https://packagist.org/packages/dazza-dev/laravel-batch-validation)[ RSS](/packages/dazza-dev-laravel-batch-validation/feed)WikiDiscussions main Synced today

READMEChangelog (4)Dependencies (8)Versions (6)Used By (0)

Laravel Batch Validation
========================

[](#laravel-batch-validation)

When performing array validations in Laravel with unique rules, Laravel validates one record at a time, causing an N+1 query problem. This is a common issue when importing data from an Excel file and validating it before inserting it into the database. This package solves the problem by batching the unique validations and using whereIn to prevent the N+1 problem.

Install
-------

[](#install)

```
composer require dazza-dev/laravel-batch-validation
```

Usage
-----

[](#usage)

This package is easy to use. Here's an example of how to apply it:

```
use Illuminate\Support\Facades\Validator;

$data = [
    ['name' => 'User 1', 'email' => 'user1@example.com'],
    ['name' => 'User 2', 'email' => 'user2@example.com'],
    ['name' => 'User 3', 'email' => 'user3@example.com'],
];

// Validator Instance
$validator = Validator::make($data, [
    '*.name' => 'required',
    '*.email' => 'email:strict|unique:contacts,email',
]);

// Validate in Batches (this prevent n+1 problem)
$validator->validateInBatches();

// Validation fails
if ($validator->fails()) {
    throw new \Exception(json_encode($validator->errors()->messages()));
}
```

Batch Size
----------

[](#batch-size)

You can change the batch size by passing the `batchSize` parameter to the `validateInBatches` method. The default batch size is 10.

```
$validator->validateInBatches(batchSize: 20);
```

Database Rules
--------------

[](#database-rules)

This package also supports database rules like `unique`, `exists`.

```
$validator = Validator::make($data, [
    '*.name' => 'required',
    '*.email' => 'email:strict|unique:contacts,email',
]);
```

Form Request
------------

[](#form-request)

You can use the `validateInBatches` method in a form request.

```
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Validator;

class StoreContactRequest extends FormRequest
{
    public function rules(): array
    {
        return [
            '*.name' => 'required',
            '*.email' => 'email:strict|unique:contacts,email',
        ];
    }

    public function withValidator(Validator $validator)
    {
        if (method_exists($validator, 'validateInBatches')) {
            $validator->validateInBatches(batchSize: 100);
        }
    }
}
```

Before and After Optimization
-----------------------------

[](#before-and-after-optimization)

### Before (N+1 problem)

[](#before-n1-problem)

[![Before Optimization](https://private-user-images.githubusercontent.com/21293561/404085205-e1c8c3a6-d7eb-423b-8448-8d5cc6e2d968.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODMxNDkzMTIsIm5iZiI6MTc4MzE0OTAxMiwicGF0aCI6Ii8yMTI5MzU2MS80MDQwODUyMDUtZTFjOGMzYTYtZDdlYi00MjNiLTg0NDgtOGQ1Y2M2ZTJkOTY4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA3MDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNzA0VDA3MTAxMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWM4ZDg5OTBkNzBhM2EzNjdlZWVkODBiYjNlZGZmOTFkNjI0ODIxMDNmNjhiZjkzMWZhMTgxMTMxNTg5NjE5MjQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.fkfjn7hCe8FajsMwn4AarRLj_EmuifqzO-y3wm6vG54)](https://private-user-images.githubusercontent.com/21293561/404085205-e1c8c3a6-d7eb-423b-8448-8d5cc6e2d968.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODMxNDkzMTIsIm5iZiI6MTc4MzE0OTAxMiwicGF0aCI6Ii8yMTI5MzU2MS80MDQwODUyMDUtZTFjOGMzYTYtZDdlYi00MjNiLTg0NDgtOGQ1Y2M2ZTJkOTY4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA3MDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNzA0VDA3MTAxMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWM4ZDg5OTBkNzBhM2EzNjdlZWVkODBiYjNlZGZmOTFkNjI0ODIxMDNmNjhiZjkzMWZhMTgxMTMxNTg5NjE5MjQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.fkfjn7hCe8FajsMwn4AarRLj_EmuifqzO-y3wm6vG54)

### After (Optimized)

[](#after-optimized)

[![After Optimization](https://private-user-images.githubusercontent.com/21293561/404085204-4c2353a1-4571-440c-90a4-d7221ec64a44.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODMxNDkzMTIsIm5iZiI6MTc4MzE0OTAxMiwicGF0aCI6Ii8yMTI5MzU2MS80MDQwODUyMDQtNGMyMzUzYTEtNDU3MS00NDBjLTkwYTQtZDcyMjFlYzY0YTQ0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA3MDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNzA0VDA3MTAxMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWY1MTJhZWQ3OGM3ODBiM2Y1ZmQ5N2QxM2YxOTk4OWI3NGEyZDZiZDcxZjRmMWIxMmFjOWIwNzFjNWQyMGZhZDkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.tRrTe17O77-zkd9U2kNJs7EqyqvRxYyjcdFkU4Qird0)](https://private-user-images.githubusercontent.com/21293561/404085204-4c2353a1-4571-440c-90a4-d7221ec64a44.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODMxNDkzMTIsIm5iZiI6MTc4MzE0OTAxMiwicGF0aCI6Ii8yMTI5MzU2MS80MDQwODUyMDQtNGMyMzUzYTEtNDU3MS00NDBjLTkwYTQtZDcyMjFlYzY0YTQ0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA3MDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNzA0VDA3MTAxMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWY1MTJhZWQ3OGM3ODBiM2Y1ZmQ5N2QxM2YxOTk4OWI3NGEyZDZiZDcxZjRmMWIxMmFjOWIwNzFjNWQyMGZhZDkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.tRrTe17O77-zkd9U2kNJs7EqyqvRxYyjcdFkU4Qird0)

Contributions
-------------

[](#contributions)

Contributions are welcome. If you find any bugs or have ideas for improvements, please open an issue or send a pull request. Make sure to follow the contribution guidelines.

Author
------

[](#author)

Laravel Batch Validation was created by [DAZZA](https://github.com/dazza-dev).

License
-------

[](#license)

This project is licensed under the [MIT License](https://opensource.org/licenses/MIT).

###  Health Score

49

—

FairBetter than 94% of packages

Maintenance96

Actively maintained with recent releases

Popularity26

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 90% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~95 days

Total

5

Last Release

20d ago

Major Versions

v1.0.0 → v2.0.02025-09-16

PHP version history (2 changes)1.x-devPHP &gt;=7.4

v2.1.0PHP &gt;=8.2

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/21293561?v=4)[Dazza](/maintainers/dazza-dev)[@dazza-dev](https://github.com/dazza-dev)

---

Top Contributors

[![dazza-dev](https://avatars.githubusercontent.com/u/21293561?v=4)](https://github.com/dazza-dev "dazza-dev (18 commits)")[![reinerttomas](https://avatars.githubusercontent.com/u/9898614?v=4)](https://github.com/reinerttomas "reinerttomas (2 commits)")

---

Tags

laravelvalidationbatch

###  Code Quality

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/dazza-dev-laravel-batch-validation/health.svg)

```
[![Health](https://phpackages.com/badges/dazza-dev-laravel-batch-validation/health.svg)](https://phpackages.com/packages/dazza-dev-laravel-batch-validation)
```

###  Alternatives

[crazybooot/base64-validation

Laravel validators for base64 encoded files

1352.0M8](/packages/crazybooot-base64-validation)[carsdotcom/laravel-json-schema

Json Schema validation for Laravel projects

1043.3k6](/packages/carsdotcom-laravel-json-schema)[api-platform/laravel

API Platform support for Laravel

58171.5k14](/packages/api-platform-laravel)[ecotone/laravel

Ecotone for Laravel — CQRS, Event Sourcing, Sagas, Durable Workflows, and Outbox on top of Laravel Queue, via PHP attributes.

21318.6k3](/packages/ecotone-laravel)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
