PHPackages                             zing/laravel-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. zing/laravel-query-builder

ActiveLibrary

zing/laravel-query-builder
==========================

Build Eloquent query from request.

3.4.0(2mo ago)41.8k1[1 issues](https://github.com/zingimmick/laravel-query-builder/issues)MITPHPPHP ^8.0CI passing

Since Apr 15Pushed 3mo ago1 watchersCompare

[ Source](https://github.com/zingimmick/laravel-query-builder)[ Packagist](https://packagist.org/packages/zing/laravel-query-builder)[ Docs](https://github.com/zingimmick/laravel-query-builder)[ RSS](/packages/zing-laravel-query-builder/feed)WikiDiscussions 3.x Synced 1mo ago

READMEChangelog (10)Dependencies (16)Versions (55)Used By (0)

Laravel Query Builder
=====================

[](#laravel-query-builder)

[![Code snippet](./docs/snippet.png)](./docs/snippet.png)

[![Build Status](https://github.com/zingimmick/laravel-query-builder/actions/workflows/tests.yml/badge.svg?branch=3.x)](https://github.com/zingimmick/laravel-query-builder/actions/workflows/tests.yml)[![Code Coverage](https://camo.githubusercontent.com/37347ca8dd71d9d332096e8a7f9469dfaaf25e36348c1497808872bf8a6c57fb/68747470733a2f2f636f6465636f762e696f2f67682f7a696e67696d6d69636b2f6c61726176656c2d71756572792d6275696c6465722f6272616e63682f332e782f67726170682f62616467652e737667)](https://codecov.io/gh/zingimmick/laravel-query-builder)[![Latest Stable Version](https://camo.githubusercontent.com/939917b78aaf304501d259daf8e9b71166607ec74ff4c7a86a25ab2ede9951f3/68747470733a2f2f706f7365722e707567782e6f72672f7a696e672f6c61726176656c2d71756572792d6275696c6465722f762f737461626c652e737667)](https://packagist.org/packages/zing/laravel-query-builder)[![Total Downloads](https://camo.githubusercontent.com/3058ae06a571045feaa4e1721c11ad17b4835d8221f83d2b26d033051f31c0f8/68747470733a2f2f706f7365722e707567782e6f72672f7a696e672f6c61726176656c2d71756572792d6275696c6465722f646f776e6c6f616473)](https://packagist.org/packages/zing/laravel-query-builder)[![Latest Unstable Version](https://camo.githubusercontent.com/c8c99b7bcf2e246f9f6685489485089a4d1f2ab3115436f22ae7ac397830d7a3/68747470733a2f2f706f7365722e707567782e6f72672f7a696e672f6c61726176656c2d71756572792d6275696c6465722f762f756e737461626c652e737667)](https://packagist.org/packages/zing/laravel-query-builder)[![License](https://camo.githubusercontent.com/e58b5de671d69a263f51a9b83afae5c6f1a6fdaaaa4f0838f1b49100de9bcd37/68747470733a2f2f706f7365722e707567782e6f72672f7a696e672f6c61726176656c2d71756572792d6275696c6465722f6c6963656e7365)](https://packagist.org/packages/zing/laravel-query-builder)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/6e5cc1bf9fe608d223359ad851f1ca88ab6853c83a1a3ea94dcc35a9eb82c980/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f7a696e67696d6d69636b2f6c61726176656c2d71756572792d6275696c6465722f6261646765732f7175616c6974792d73636f72652e706e67)](https://scrutinizer-ci.com/g/zingimmick/laravel-query-builder)[![StyleCI Shield](https://camo.githubusercontent.com/33a13411959bfe5a327b32c016851da055a945201feb407f0ddaef6632e5895f/68747470733a2f2f6769746875622e7374796c6563692e696f2f7265706f732f3235353632313237392f736869656c643f6272616e63683d332e78)](https://github.styleci.io/repos/255621279)[![Code Climate](https://camo.githubusercontent.com/7736a3bad9f22b45db427572d563628d61b69f511184cc160aaac77aa33a126d/68747470733a2f2f6170692e636f6465636c696d6174652e636f6d2f76312f6261646765732f36626433636264356264373562366563356232652f6d61696e7461696e6162696c697479)](https://codeclimate.com/github/zingimmick/laravel-query-builder/maintainability)[![FOSSA Status](https://camo.githubusercontent.com/ff3536d2519c098a072bf192d79c73b8cd40135cd62fa826f684303ed73ba5b2/68747470733a2f2f6170702e666f7373612e636f6d2f6170692f70726f6a656374732f6769742532426769746875622e636f6d2532467a696e67696d6d69636b2532466c61726176656c2d71756572792d6275696c6465722e7376673f747970653d736869656c64)](https://app.fossa.com/projects/git%2Bgithub.com%2Fzingimmick%2Flaravel-query-builder?ref=badge_shield)

### Requirements

[](#requirements)

- [PHP 8.0+](https://php.net/releases/)
- [Composer](https://getcomposer.org)
- [Laravel 8.0+](https://laravel.com/docs/releases)

Require Laravel Query Builder using [Composer](https://getcomposer.org):

```
composer require zing/laravel-query-builder
```

- [Basic usage](#basic-usage)
- [Search](#search)
    - [Composite search](#composite-search)
- [Filter](#filter)
    - [Typed filter](#typed-filter)
    - [Flagged filter](#flagged-filter)
    - [Cast Input(Skip auto cast)](#cast-inputskip-auto-cast)
- [Sort](#sort)
- [Paginator](#paginator)

Usage
-----

[](#usage)

### Basic usage

[](#basic-usage)

```
use Zing\QueryBuilder\QueryBuilder;
use Zing\QueryBuilder\Tests\Models\User;

// uri: /api/users?search=Harry&status=1,2,3&desc=created_at&per_page=10
// sql: select * from "users" where ("name" like "%Harry%") and "status" in ("1", "2", "3") order by "created_at" desc limit 11 offset 0
QueryBuilder::fromBuilder(User::class, $request)
    ->searchable(['name'])
    ->enableFilters(['is_visible', 'status'])
    ->enableSorts(['created_at'])
    ->enablePaginator()
    ->simplePaginate();
```

### Search

[](#search)

```
use Zing\QueryBuilder\QueryBuilder;
use Zing\QueryBuilder\Tests\Models\User;

// uri: /api/users?search=Harry
// sql: select * from "users" where ("name" like "%Harry%" or "email" like "%Harry%") limit 16 offset 0
QueryBuilder::fromBuilder(User::class, $request)
    ->searchable(['name', 'email'])
    ->simplePaginate();
```

#### Composite search

[](#composite-search)

**⚠️ The filter with default value is not supported yet.**

```
use Zing\QueryBuilder\Filter;
use Zing\QueryBuilder\QueryBuilder;
use Zing\QueryBuilder\Tests\Models\User;

// uri: /api/users?search=2021
// sql: select * from "users" where ("number" like "%2021%" or ("id" = "2021")) limit 16 offset 0
QueryBuilder::fromBuilder(User::class, $request)
    ->searchable(['number', Filter::exact('encoded_id', 'id')])
    ->simplePaginate();
```

### Filter

[](#filter)

```
use Zing\QueryBuilder\Filter;
use Zing\QueryBuilder\QueryBuilder;
use Zing\QueryBuilder\Tests\Models\User;

// uri: /api/users?name=Harry
// sql: select * from "users" where "name" like "%Harry%" limit 16 offset 0
QueryBuilder::fromBuilder(User::class, $request)
    ->enableFilters([Filter::partial('name')])
    ->simplePaginate();
```

```
use Zing\QueryBuilder\Filter;
use Zing\QueryBuilder\QueryBuilder;
use Zing\QueryBuilder\Tests\Models\User;

// uri: /api/users?status=1,2,3
// sql: select * from "users" where "status" in ("1", "2", "3") limit 16 offset 0
QueryBuilder::fromBuilder(User::class, $request)
    ->enableFilters([Filter::exact('status')])
    ->simplePaginate();
```

```
use Zing\QueryBuilder\Filter;
use Zing\QueryBuilder\QueryBuilder;
use Zing\QueryBuilder\Tests\Models\User;

// uri: /api/users?visible=1
// sql: select * from "users" where "is_visible" = true limit 16 offset 0
// uri: /api/users
// sql: select * from "users" where "is_visible" = true limit 16 offset 0
QueryBuilder::fromBuilder(User::class, $request)
    ->enableFilters([Filter::scope('visible')->default(true)])
    ->simplePaginate();
```

#### Typed filter

[](#typed-filter)

**⚠️ The filter with default value is not supported yet.**

```
use Zing\QueryBuilder\Filter;
use Zing\QueryBuilder\QueryBuilder;
use Zing\QueryBuilder\Tests\Models\Order;

// uri: /api/users?search_type=number&search_value=2021
// sql: select * from "orders" where "number" like "%2021%" limit 16 offset 0
QueryBuilder::fromBuilder(Order::class, $request)
    ->enableTypedFilter(
        'search_type',
        'search_value',
        [Filter::partial('number'), Filter::partial('user_name', 'user.name')]
    )
    ->simplePaginate();
```

#### Flagged filter

[](#flagged-filter)

```
use Zing\QueryBuilder\Filter;
use Zing\QueryBuilder\QueryBuilder;
use Zing\QueryBuilder\Tests\Models\Order;

// uri: /api/users?number=2021&user_name=Jone
// sql: select * from "orders" where (("number" like "%2021%") or (exists (select * from "users" where "orders"."user_id" = "users"."id" and "users"."name" like "%Jone%"))) limit 16 offset 0
QueryBuilder::fromBuilder(Order::class, $request)
    ->enableFlaggedFilter([Filter::partial('number'), Filter::partial('user_name', 'user.name')])
    ->simplePaginate();
```

#### Cast Input(Skip auto cast)

[](#cast-inputskip-auto-cast)

```
use Zing\QueryBuilder\Enums\CastType;
use Zing\QueryBuilder\Filter;
use Zing\QueryBuilder\QueryBuilder;
use Zing\QueryBuilder\Tests\Models\User;

// uri: /api/users?is_visible=true
// sql: select * from "users" where "is_visible" = true limit 16 offset 0
// uri: /api/users?is_visible=true,false
// sql: select * from "users" where "is_visible" in (true, false) limit 16 offset 0
QueryBuilder::fromBuilder(User::class, $request)
    ->enableFilters(Filter::exact('is_visible')->withCast(CastType::BOOLEAN))
    ->simplePaginate();
```

```
use Zing\QueryBuilder\Enums\CastType;
use Zing\QueryBuilder\Filter;
use Zing\QueryBuilder\QueryBuilder;
use Zing\QueryBuilder\Tests\Models\Order;

// uri: /api/orders?content=code,and
// sql: select * from "orders" where "content" like "%code,and%" limit 16 offset 0
QueryBuilder::fromBuilder(Order::class, $request)
    ->enableFilters(Filter::partial('content')->withCast(CastType::ORIGINAL))
    ->simplePaginate();
```

### Sort

[](#sort)

```
use Zing\QueryBuilder\QueryBuilder;
use Zing\QueryBuilder\Sort;
use Zing\QueryBuilder\Tests\Models\Order;

// uri: /api/users?desc=created_date
// sql: select * from "orders" order by "created_at" desc limit 16 offset 0
QueryBuilder::fromBuilder(Order::class, $request)
    ->enableSorts([Sort::field('created_date', 'created_at')])
    ->simplePaginate();
```

### Paginator

[](#paginator)

```
use Zing\QueryBuilder\QueryBuilder;
use Zing\QueryBuilder\Tests\Models\User;

// uri: /api/users?size=5
// sql: select * from "users" limit 6 offset 0
QueryBuilder::fromBuilder(User::class, $request)
    ->enablePaginator('size')
    ->simplePaginate();
```

```
use Zing\QueryBuilder\Paginator;
use Zing\QueryBuilder\QueryBuilder;
use Zing\QueryBuilder\Tests\Models\User;

// uri: /api/users?size=
// sql: select * from "users" limit 6 offset 0
QueryBuilder::fromBuilder(User::class, $request)
    ->enablePaginator(Paginator::name('size')->default(5))
    ->simplePaginate();
```

License
-------

[](#license)

Laravel Query Builder is an open-sourced software licensed under the [MIT license](LICENSE).

[![FOSSA Status](https://camo.githubusercontent.com/e0aec855e5a92af39291a472b1215e75a2b51d5f7f990e951e49dd648950a2c9/68747470733a2f2f6170702e666f7373612e636f6d2f6170692f70726f6a656374732f6769742532426769746875622e636f6d2532467a696e67696d6d69636b2532466c61726176656c2d71756572792d6275696c6465722e7376673f747970653d6c61726765)](https://app.fossa.com/projects/git%2Bgithub.com%2Fzingimmick%2Flaravel-query-builder?ref=badge_large)

###  Health Score

50

—

FairBetter than 96% of packages

Maintenance79

Regular maintenance activity

Popularity20

Limited adoption so far

Community15

Small or concentrated contributor base

Maturity74

Established project with proven stability

 Bus Factor1

Top contributor holds 67.9% 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 ~41 days

Recently: every ~287 days

Total

54

Last Release

53d ago

Major Versions

0.6.0 → 1.0.0-alpha.12021-11-03

1.7.2 → 2.0.02022-04-16

1.x-dev → 2.0.12022-09-20

2.x-dev → 3.0.02022-12-09

PHP version history (4 changes)0.0.1PHP ^7.2

0.4.0PHP ^7.2 || ^8.0

2.0.0PHP ^7.3 || ^8.0

3.0.0PHP ^8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/5fafa5bffa28dcd722432b244bf3f0bfe773406df29fea295847e2397b95d50b?d=identicon)[zingimmick](/maintainers/zingimmick)

---

Top Contributors

[![zingimmick](https://avatars.githubusercontent.com/u/26657141?v=4)](https://github.com/zingimmick "zingimmick (294 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (105 commits)")[![kodiakhq[bot]](https://avatars.githubusercontent.com/in/29196?v=4)](https://github.com/kodiakhq[bot] "kodiakhq[bot] (20 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (6 commits)")[![renovate[bot]](https://avatars.githubusercontent.com/in/2740?v=4)](https://github.com/renovate[bot] "renovate[bot] (4 commits)")[![renovate-bot](https://avatars.githubusercontent.com/u/25180681?v=4)](https://github.com/renovate-bot "renovate-bot (3 commits)")[![fossabot](https://avatars.githubusercontent.com/u/29791463?v=4)](https://github.com/fossabot "fossabot (1 commits)")

---

Tags

laravelrequest-query-builerrequestlaravelquery builder

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

### Embed Badge

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

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

###  Alternatives

[api-platform/laravel

API Platform support for Laravel

59126.4k6](/packages/api-platform-laravel)[ryangjchandler/bearer

Minimalistic token-based authentication for Laravel API endpoints.

8129.8k](/packages/ryangjchandler-bearer)[dragon-code/laravel-http-logger

Logging incoming HTTP requests

319.8k3](/packages/dragon-code-laravel-http-logger)[bjuppa/laravel-blog

Add blog functionality to your Laravel project

483.3k2](/packages/bjuppa-laravel-blog)

PHPackages © 2026

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