PHPackages                             laravilt/query-builder - 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. [Database &amp; ORM](/categories/database)
4. /
5. laravilt/query-builder

ActiveLibrary[Database &amp; ORM](/categories/database)

laravilt/query-builder
======================

Complete query builder system with filters, sorting, search, and pagination. Build powerful, filterable data queries with support for multiple filter types, custom sorts, full-text search, and seamless Inertia.js integration.

1.0.1(5mo ago)0453↓45.5%2MITPHPPHP ^8.3|^8.4CI passing

Since Dec 11Pushed 5mo agoCompare

[ Source](https://github.com/laravilt/query-builder)[ Packagist](https://packagist.org/packages/laravilt/query-builder)[ GitHub Sponsors](https://github.com/fadymondy)[ RSS](/packages/laravilt-query-builder/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (2)Dependencies (16)Versions (3)Used By (2)

[![QueryBuilder](./arts/screenshot.jpg)](./arts/screenshot.jpg)

Laravilt Query Builder
======================

[](#laravilt-query-builder)

[![Latest Stable Version](https://camo.githubusercontent.com/2a8fddb742d5142b3107d079cf749123d1ca9dff647ab753ab36612919274b85/68747470733a2f2f706f7365722e707567782e6f72672f6c61726176696c742f71756572792d6275696c6465722f76657273696f6e2e737667)](https://packagist.org/packages/laravilt/query-builder)[![License](https://camo.githubusercontent.com/1069ab9886a332178251ce375f00649845e6f31b9b8d61c45d975a2b2d7850e5/68747470733a2f2f706f7365722e707567782e6f72672f6c61726176696c742f71756572792d6275696c6465722f6c6963656e73652e737667)](https://packagist.org/packages/laravilt/query-builder)[![Downloads](https://camo.githubusercontent.com/0a5846b981fa4d37b0129c58d4281859a2f2043f63b8ba665fe128ac2857205f/68747470733a2f2f706f7365722e707567782e6f72672f6c61726176696c742f71756572792d6275696c6465722f642f746f74616c2e737667)](https://packagist.org/packages/laravilt/query-builder)[![Dependabot Updates](https://github.com/laravilt/query-builder/actions/workflows/dependabot/dependabot-updates/badge.svg)](https://github.com/laravilt/query-builder/actions/workflows/dependabot/dependabot-updates)[![PHP Code Styling](https://github.com/laravilt/query-builder/actions/workflows/fix-php-code-styling.yml/badge.svg)](https://github.com/laravilt/query-builder/actions/workflows/fix-php-code-styling.yml)[![Tests](https://github.com/laravilt/query-builder/actions/workflows/tests.yml/badge.svg)](https://github.com/laravilt/query-builder/actions/workflows/tests.yml)

Complete query builder system with filters, sorting, search, and pagination for Laravilt. Build powerful, filterable data queries with support for multiple filter types, custom sorts, full-text search, and seamless Inertia.js integration.

Features
--------

[](#features)

- 🔍 **Advanced Filtering** - Multiple filter types (select, date, range, boolean)
- ↕️ **Sorting** - Custom sort options with direction control
- 🔎 **Search** - Full-text search across multiple columns
- 📄 **Pagination** - Built-in pagination support
- ⚡ **Inertia Integration** - Seamless Vue 3 integration
- 🎯 **Eloquent Compatible** - Works with Laravel's query builder
- 🔧 **Customizable** - Extensible filters and sorts

Installation
------------

[](#installation)

```
composer require laravilt/query-builder
```

The package will automatically register its service provider.

Quick Start
-----------

[](#quick-start)

```
use Laravilt\QueryBuilder\QueryBuilder;
use Laravilt\QueryBuilder\Filters\SelectFilter;
use Laravilt\QueryBuilder\Filters\DateFilter;
use Laravilt\QueryBuilder\Sort;

$queryBuilder = new QueryBuilder();

$queryBuilder
    ->filters([
        SelectFilter::make('status')
            ->options([
                'active' => 'Active',
                'inactive' => 'Inactive',
            ]),

        DateFilter::make('created_at')
            ->label('Created Date'),
    ])
    ->sorts([
        Sort::make('name')->label('Name'),
        Sort::make('created_at')->label('Date'),
    ])
    ->search('search query')
    ->sortBy('created_at', 'desc')
    ->perPage(25)
    ->apply(User::query())
    ->paginate();
```

Filter Types
------------

[](#filter-types)

### Select Filter

[](#select-filter)

```
use Laravilt\QueryBuilder\Filters\SelectFilter;

SelectFilter::make('status')
    ->label('Status')
    ->options([
        'active' => 'Active',
        'inactive' => 'Inactive',
        'pending' => 'Pending',
    ])
    ->multiple(); // Allow multiple selections
```

### Date Filter

[](#date-filter)

```
use Laravilt\QueryBuilder\Filters\DateFilter;

DateFilter::make('created_at')
    ->label('Created Date')
    ->between(); // Date range filter
```

### Range Filter

[](#range-filter)

```
use Laravilt\QueryBuilder\Filters\RangeFilter;

RangeFilter::make('price')
    ->label('Price Range')
    ->min(0)
    ->max(1000);
```

### Boolean Filter

[](#boolean-filter)

```
use Laravilt\QueryBuilder\Filters\BooleanFilter;

BooleanFilter::make('is_active')
    ->label('Active Only');
```

Sorting
-------

[](#sorting)

```
use Laravilt\QueryBuilder\Sort;

Sort::make('name')
    ->label('Name')
    ->default(); // Set as default sort

Sort::make('created_at')
    ->label('Date')
    ->desc(); // Default direction: desc
```

Search
------

[](#search)

```
$queryBuilder->search($request->get('search'));

// Search across specific columns
$queryBuilder->searchColumns(['name', 'email', 'phone']);
```

Pagination
----------

[](#pagination)

```
// Enable pagination (default)
$queryBuilder->paginated();

// Set per page
$queryBuilder->perPage(25);

// Disable pagination
$queryBuilder->paginated(false);
```

Applying to Eloquent Query
--------------------------

[](#applying-to-eloquent-query)

```
$query = User::query();

$queryBuilder
    ->filters([...])
    ->apply($query)
    ->paginate();
```

Inertia Integration
-------------------

[](#inertia-integration)

```
use App\QueryBuilders\UserQueryBuilder;
use Inertia\Inertia;

public function index(Request $request)
{
    $queryBuilder = new UserQueryBuilder();

    $users = $queryBuilder
        ->fromRequest($request)
        ->apply(User::query())
        ->paginate();

    return Inertia::render('Users/Index', [
        'users' => $users,
        'queryBuilder' => $queryBuilder->toInertiaProps(),
    ]);
}
```

Vue 3 Component
---------------

[](#vue-3-component)

```

import { ref } from 'vue'
import { router } from '@inertiajs/vue3'

const props = defineProps({
  users: Object,
  queryBuilder: Object
})

const handleFilterUpdate = (filters) => {
  router.get('/users', { filters }, { preserveState: true })
}

```

Configuration
-------------

[](#configuration)

Publish the config file:

```
php artisan vendor:publish --tag="laravilt-query-builder-config"
```

Assets
------

[](#assets)

Publish the plugin assets:

```
php artisan vendor:publish --tag="laravilt-query-builder-assets"
```

Testing
-------

[](#testing)

```
composer test
```

Code Style
----------

[](#code-style)

```
composer format
```

Static Analysis
---------------

[](#static-analysis)

```
composer analyse
```

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

40

—

FairBetter than 88% of packages

Maintenance72

Regular maintenance activity

Popularity16

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% 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 ~0 days

Total

2

Last Release

158d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/2147eb2fca7ab5f0124d0fafd88ba2d2a5dfa3a0036fb8872d1084b7cba29366?d=identicon)[fadymondy](/maintainers/fadymondy)

---

Top Contributors

[![fadymondy](https://avatars.githubusercontent.com/u/11937812?v=4)](https://github.com/fadymondy "fadymondy (10 commits)")

---

Tags

searchlaravelpaginationeloquentinertiaquery builderfilterssortingvuelaravilt

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/laravilt-query-builder/health.svg)

```
[![Health](https://phpackages.com/badges/laravilt-query-builder/health.svg)](https://phpackages.com/packages/laravilt-query-builder)
```

###  Alternatives

[tucker-eric/eloquentfilter

An Eloquent way to filter Eloquent Models

1.8k4.8M26](/packages/tucker-eric-eloquentfilter)[dyrynda/laravel-model-uuid

This package allows you to easily work with UUIDs in your Laravel models.

4802.8M8](/packages/dyrynda-laravel-model-uuid)[mehdi-fathi/eloquent-filter

Eloquent Filter adds custom filters automatically to your Eloquent Models in Laravel.It's easy to use and fully dynamic, just with sending the Query Strings to it.

450191.6k1](/packages/mehdi-fathi-eloquent-filter)[lacodix/laravel-model-filter

A Laravel package to filter, search and sort models with ease while fetching from database.

17649.9k](/packages/lacodix-laravel-model-filter)[kiwilan/typescriptable-laravel

PHP package for Laravel to type Eloquent models, routes, Spatie Settings with autogenerated TypeScript. If you want to use some helpers with Inertia, you can install associated NPM package.

3920.9k](/packages/kiwilan-typescriptable-laravel)[indexzer0/eloquent-filtering

Powerful eloquent filtering

22425.9k3](/packages/indexzer0-eloquent-filtering)

PHPackages © 2026

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