PHPackages                             arielespinoza07/laravel-query-kit - 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. [Search &amp; Filtering](/categories/search)
4. /
5. arielespinoza07/laravel-query-kit

ActiveLibrary[Search &amp; Filtering](/categories/search)

arielespinoza07/laravel-query-kit
=================================

A Laravel toolkit to handle for handling queries via a criteria pattern.

v1.0.1(8mo ago)03MITPHPPHP ^8.2CI failing

Since Aug 30Pushed 2mo agoCompare

[ Source](https://github.com/ArielEspinoza07/laravel-query-kit)[ Packagist](https://packagist.org/packages/arielespinoza07/laravel-query-kit)[ RSS](/packages/arielespinoza07-laravel-query-kit/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (2)Dependencies (11)Versions (4)Used By (0)

Laravel Query Kit
=================

[](#laravel-query-kit)

[![Latest on Packagist](https://camo.githubusercontent.com/ba020a3ac9c93b620c3cb0c5ab402adac3bc84c520c0fd79566d58024374dce7/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f617269656c657370696e6f7a6130372f6c61726176656c2d71756572792d6b69742e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/arielespinoza07/laravel-query-kit)[![Tests](https://camo.githubusercontent.com/0b58ec48761cd2ceba9d2010b251e292c8e3f00bd8b0b92685609fc341933807/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f617269656c657370696e6f7a6130372f6c61726176656c2d71756572792d6b69742f74657374732e796d6c3f6c6162656c3d7465737473)](https://github.com/arielespinoza07/laravel-query-kit/actions)[![Downloads](https://camo.githubusercontent.com/c43d6c2338d52540cf808e8e7678320d5f4ac166481e8d27fd57f1858c3f214d/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f617269656c657370696e6f7a6130372f6c61726176656c2d71756572792d6b69742e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/arielespinoza07/laravel-query-kit)

**Laravel Query Kit** is a powerful criteria-based query builder toolkit. It's built with SOLID principles and easy to extend.

---

🧱 Requirements
--------------

[](#-requirements)

- PHP ^8.2
- Laravel ^11.0|^12.0

---

📦 Installation
--------------

[](#-installation)

```
composer require arielespinoza07/laravel-query-kit
```

---

✨ Features
----------

[](#-features)

- ✅ Typed criteria: filters, search, pagination, sorting, soft deletes, and dates
- 🎯 Filter groups with operators (`=`, `like`, `between`, `in`, `not in`, etc.) and `AND`/`OR` logic
- 🔀 Sorts for relationships (`belongsTo`, `hasOne`, `hasMany`, etc.), with dedicated handlers
- ⚡ Central Facade/Service for composing and executing (builder, collection, pagination, resources)
- 🛡️ Input pre-validation (avoids invalid queries before touching the database)
- 🧩 Extensible architecture through interfaces (add your own criteria for filter or sort)

---

📁 Directory Structure
---------------------

[](#-directory-structure)

```
├── src/
|   ├── Console/
|   |   └── Commands/
|   |       └── stubs/
|   ├── Contracts/
|   ├── Criteria/
|   |   └── Sort/
|   ├── Exceptions/
|   ├── Handlers/
|   ├── Providers/
|   ├── Service/
|   ├── Support/
|   |   └── Facades/
|   └── ValueObjects/
└── tests/

```

---

🚀 Quickstart
------------

[](#-quickstart)

```
use App\Models\User;
use LaravelQueryKit\Criteria\WhereFieldCriteria;
use LaravelQueryKit\Criteria\SortCriteria;
use LaravelQueryKit\Support\Facades\QueryKitBuilder;

$query = QueryKitBuilder::for(new User)
    ->withCriteria(
        new WhereFieldCriteria('email', 'like', '%john.doe%'),
        new SortCriteria('created_at', 'desc')->withDefaultSorts()
    );
```

1. Get the builder

```
/** @var \Illuminate\Contracts\Database\Query\Builder $builder */
$builder = $query->builder();
```

2. Get the model

```
/** @var \Illuminate\Database\Eloquent\Model|null $response */
$response = $query->toModel();
```

3. Execute and get the response as a collection

```
/** @var \Illuminate\Support\Collection $response */
$response = $query->toCollection();
```

4. Execute and get the response paginated

```
/** @var \Illuminate\Pagination\LengthAwarePaginator $response */
$response = $query->withPagination(page: 1, perPage: 10)
    ->toPaginated();
```

5. Execute and get the response as a resource (single model)

```
use App\Http\Resources\UserResource;

/** @var \Illuminate\Http\Resources\JsonResource $response */
$response = $query->toJsonResource(UserResource::class);
```

6. Execute and get the response as a resource (collection)

```
use App\Http\Resources\UserCollection;

/** @var \Illuminate\Http\Resources\Json\ResourceCollection $response */
$response = $query->toResourceCollection(UserCollection::class);
```

7. Execute and get the response as a resource (collection paginated)

```
use App\Http\Resources\UserCollection;

/** @var \Illuminate\Http\Resources\Json\ResourceCollection $response */
$response = $query->withPagination(page: 1, perPage: 10)
    ->toResourceCollection(UserCollection::class);
```

---

### 🔎 Methods &amp; Handlers

[](#-methods--handlers)

MethodHandler`toModel()``ModelHandler``toCollection()``CollectionHandler``toPaginated()``PaginatedHandler``toJsonResource()``JsonResourceHandler``toResourceCollection()``ResourceCollectionHandler`---

Artisan Generators
------------------

[](#artisan-generators)

1. Create a new criteria class `WeekOrdersCriteria`

```
php artisan make:criteria WeekOrders
```

```
