{"id":16315053,"url":"https://github.com/zingimmick/laravel-query-builder","last_synced_at":"2025-10-25T17:30:20.889Z","repository":{"id":37043173,"uuid":"255621279","full_name":"zingimmick/laravel-query-builder","owner":"zingimmick","description":"The easiest way to build Eloquent queries from request","archived":false,"fork":false,"pushed_at":"2024-08-21T19:57:51.000Z","size":524,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"3.x","last_synced_at":"2024-10-30T01:51:23.776Z","etag":null,"topics":["laravel","request-query-builer"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zingimmick.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-04-14T13:47:03.000Z","updated_at":"2024-08-21T19:57:54.000Z","dependencies_parsed_at":"2023-02-17T09:30:45.970Z","dependency_job_id":"a6739a04-a7c2-4271-b3d3-0d092fcf319f","html_url":"https://github.com/zingimmick/laravel-query-builder","commit_stats":{"total_commits":323,"total_committers":7,"mean_commits":"46.142857142857146","dds":0.2569659442724458,"last_synced_commit":"8ced5f7b1d1871fda118686ee516bc840d8f2ddf"},"previous_names":[],"tags_count":49,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zingimmick%2Flaravel-query-builder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zingimmick%2Flaravel-query-builder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zingimmick%2Flaravel-query-builder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zingimmick%2Flaravel-query-builder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zingimmick","download_url":"https://codeload.github.com/zingimmick/laravel-query-builder/tar.gz/refs/heads/3.x","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238183510,"owners_count":19430132,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["laravel","request-query-builer"],"created_at":"2024-10-10T21:55:55.689Z","updated_at":"2025-10-25T17:30:20.486Z","avatar_url":"https://github.com/zingimmick.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Laravel Query Builder\n\n![Code snippet](./docs/snippet.png)\n\n[![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)\n[![Code Coverage](https://codecov.io/gh/zingimmick/laravel-query-builder/branch/3.x/graph/badge.svg)](https://codecov.io/gh/zingimmick/laravel-query-builder)\n[![Latest Stable Version](https://poser.pugx.org/zing/laravel-query-builder/v/stable.svg)](https://packagist.org/packages/zing/laravel-query-builder)\n[![Total Downloads](https://poser.pugx.org/zing/laravel-query-builder/downloads)](https://packagist.org/packages/zing/laravel-query-builder)\n[![Latest Unstable Version](https://poser.pugx.org/zing/laravel-query-builder/v/unstable.svg)](https://packagist.org/packages/zing/laravel-query-builder)\n[![License](https://poser.pugx.org/zing/laravel-query-builder/license)](https://packagist.org/packages/zing/laravel-query-builder)\n[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/zingimmick/laravel-query-builder/badges/quality-score.png)](https://scrutinizer-ci.com/g/zingimmick/laravel-query-builder)\n[![StyleCI Shield](https://github.styleci.io/repos/255621279/shield?branch=3.x)](https://github.styleci.io/repos/255621279)\n[![Code Climate](https://api.codeclimate.com/v1/badges/6bd3cbd5bd75b6ec5b2e/maintainability)](https://codeclimate.com/github/zingimmick/laravel-query-builder/maintainability)\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fzingimmick%2Flaravel-query-builder.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fzingimmick%2Flaravel-query-builder?ref=badge_shield)\n\n### Requirements\n\n- [PHP 8.0+](https://php.net/releases/)\n- [Composer](https://getcomposer.org)\n- [Laravel 8.0+](https://laravel.com/docs/releases)\n\nRequire Laravel Query Builder using [Composer](https://getcomposer.org):\n\n```bash\ncomposer require zing/laravel-query-builder\n```\n\n- [Basic usage](#basic-usage)\n- [Search](#search)\n  - [Composite search](#composite-search)\n- [Filter](#filter)\n  - [Typed filter](#typed-filter)\n  - [Flagged filter](#flagged-filter)\n  - [Cast Input(Skip auto cast)](#cast-inputskip-auto-cast)\n- [Sort](#sort)\n- [Paginator](#paginator)\n\n\n## Usage\n\n### Basic usage\n\n```php\nuse Zing\\QueryBuilder\\QueryBuilder;\nuse Zing\\QueryBuilder\\Tests\\Models\\User;\n\n// uri: /api/users?search=Harry\u0026status=1,2,3\u0026desc=created_at\u0026per_page=10\n// sql: select * from \"users\" where (\"name\" like \"%Harry%\") and \"status\" in (\"1\", \"2\", \"3\") order by \"created_at\" desc limit 11 offset 0\nQueryBuilder::fromBuilder(User::class, $request)\n    -\u003esearchable(['name'])\n    -\u003eenableFilters(['is_visible', 'status'])\n    -\u003eenableSorts(['created_at'])\n    -\u003eenablePaginator()\n    -\u003esimplePaginate();\n```\n\n### Search\n\n```php\nuse Zing\\QueryBuilder\\QueryBuilder;\nuse Zing\\QueryBuilder\\Tests\\Models\\User;\n\n// uri: /api/users?search=Harry\n// sql: select * from \"users\" where (\"name\" like \"%Harry%\" or \"email\" like \"%Harry%\") limit 16 offset 0\nQueryBuilder::fromBuilder(User::class, $request)\n    -\u003esearchable(['name', 'email'])\n    -\u003esimplePaginate();\n```\n\n#### Composite search\n\n**⚠️ The filter with default value is not supported yet.**\n\n```php\nuse Zing\\QueryBuilder\\Filter;\nuse Zing\\QueryBuilder\\QueryBuilder;\nuse Zing\\QueryBuilder\\Tests\\Models\\User;\n\n// uri: /api/users?search=2021\n// sql: select * from \"users\" where (\"number\" like \"%2021%\" or (\"id\" = \"2021\")) limit 16 offset 0\nQueryBuilder::fromBuilder(User::class, $request)\n    -\u003esearchable(['number', Filter::exact('encoded_id', 'id')])\n    -\u003esimplePaginate();\n```\n\n### Filter\n\n```php\nuse Zing\\QueryBuilder\\Filter;\nuse Zing\\QueryBuilder\\QueryBuilder;\nuse Zing\\QueryBuilder\\Tests\\Models\\User;\n\n// uri: /api/users?name=Harry\n// sql: select * from \"users\" where \"name\" like \"%Harry%\" limit 16 offset 0\nQueryBuilder::fromBuilder(User::class, $request)\n    -\u003eenableFilters([Filter::partial('name')])\n    -\u003esimplePaginate();\n```\n\n```php\nuse Zing\\QueryBuilder\\Filter;\nuse Zing\\QueryBuilder\\QueryBuilder;\nuse Zing\\QueryBuilder\\Tests\\Models\\User;\n\n// uri: /api/users?status=1,2,3\n// sql: select * from \"users\" where \"status\" in (\"1\", \"2\", \"3\") limit 16 offset 0\nQueryBuilder::fromBuilder(User::class, $request)\n    -\u003eenableFilters([Filter::exact('status')])\n    -\u003esimplePaginate();\n```\n\n```php\nuse Zing\\QueryBuilder\\Filter;\nuse Zing\\QueryBuilder\\QueryBuilder;\nuse Zing\\QueryBuilder\\Tests\\Models\\User;\n\n// uri: /api/users?visible=1\n// sql: select * from \"users\" where \"is_visible\" = true limit 16 offset 0\n// uri: /api/users\n// sql: select * from \"users\" where \"is_visible\" = true limit 16 offset 0\nQueryBuilder::fromBuilder(User::class, $request)\n    -\u003eenableFilters([Filter::scope('visible')-\u003edefault(true)])\n    -\u003esimplePaginate();\n```\n\n#### Typed filter\n\n**⚠️ The filter with default value is not supported yet.**\n\n```php\nuse Zing\\QueryBuilder\\Filter;\nuse Zing\\QueryBuilder\\QueryBuilder;\nuse Zing\\QueryBuilder\\Tests\\Models\\Order;\n\n// uri: /api/users?search_type=number\u0026search_value=2021\n// sql: select * from \"orders\" where \"number\" like \"%2021%\" limit 16 offset 0\nQueryBuilder::fromBuilder(Order::class, $request)\n    -\u003eenableTypedFilter(\n        'search_type',\n        'search_value',\n        [Filter::partial('number'), Filter::partial('user_name', 'user.name')]\n    )\n    -\u003esimplePaginate();\n```\n\n#### Flagged filter\n\n```php\nuse Zing\\QueryBuilder\\Filter;\nuse Zing\\QueryBuilder\\QueryBuilder;\nuse Zing\\QueryBuilder\\Tests\\Models\\Order;\n\n// uri: /api/users?number=2021\u0026user_name=Jone\n// 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\nQueryBuilder::fromBuilder(Order::class, $request)\n    -\u003eenableFlaggedFilter([Filter::partial('number'), Filter::partial('user_name', 'user.name')])\n    -\u003esimplePaginate();\n```\n\n#### Cast Input(Skip auto cast)\n\n```php\nuse Zing\\QueryBuilder\\Enums\\CastType;\nuse Zing\\QueryBuilder\\Filter;\nuse Zing\\QueryBuilder\\QueryBuilder;\nuse Zing\\QueryBuilder\\Tests\\Models\\User;\n\n// uri: /api/users?is_visible=true\n// sql: select * from \"users\" where \"is_visible\" = true limit 16 offset 0\n// uri: /api/users?is_visible=true,false\n// sql: select * from \"users\" where \"is_visible\" in (true, false) limit 16 offset 0\nQueryBuilder::fromBuilder(User::class, $request)\n    -\u003eenableFilters(Filter::exact('is_visible')-\u003ewithCast(CastType::BOOLEAN))\n    -\u003esimplePaginate();\n```\n\n```php\nuse Zing\\QueryBuilder\\Enums\\CastType;\nuse Zing\\QueryBuilder\\Filter;\nuse Zing\\QueryBuilder\\QueryBuilder;\nuse Zing\\QueryBuilder\\Tests\\Models\\Order;\n\n// uri: /api/orders?content=code,and\n// sql: select * from \"orders\" where \"content\" like \"%code,and%\" limit 16 offset 0\nQueryBuilder::fromBuilder(Order::class, $request)\n    -\u003eenableFilters(Filter::partial('content')-\u003ewithCast(CastType::ORIGINAL))\n    -\u003esimplePaginate();\n```\n\n### Sort\n\n```php\nuse Zing\\QueryBuilder\\QueryBuilder;\nuse Zing\\QueryBuilder\\Sort;\nuse Zing\\QueryBuilder\\Tests\\Models\\Order;\n\n// uri: /api/users?desc=created_date\n// sql: select * from \"orders\" order by \"created_at\" desc limit 16 offset 0\nQueryBuilder::fromBuilder(Order::class, $request)\n    -\u003eenableSorts([Sort::field('created_date', 'created_at')])\n    -\u003esimplePaginate();\n```\n\n### Paginator\n\n```php\nuse Zing\\QueryBuilder\\QueryBuilder;\nuse Zing\\QueryBuilder\\Tests\\Models\\User;\n\n// uri: /api/users?size=5\n// sql: select * from \"users\" limit 6 offset 0\nQueryBuilder::fromBuilder(User::class, $request)\n    -\u003eenablePaginator('size')\n    -\u003esimplePaginate();\n```\n\n```php\nuse Zing\\QueryBuilder\\Paginator;\nuse Zing\\QueryBuilder\\QueryBuilder;\nuse Zing\\QueryBuilder\\Tests\\Models\\User;\n\n// uri: /api/users?size=\n// sql: select * from \"users\" limit 6 offset 0\nQueryBuilder::fromBuilder(User::class, $request)\n    -\u003eenablePaginator(Paginator::name('size')-\u003edefault(5))\n    -\u003esimplePaginate();\n```\n\n## License\n\nLaravel Query Builder is an open-sourced software licensed under the [MIT license](LICENSE).\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fzingimmick%2Flaravel-query-builder.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fzingimmick%2Flaravel-query-builder?ref=badge_large)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzingimmick%2Flaravel-query-builder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzingimmick%2Flaravel-query-builder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzingimmick%2Flaravel-query-builder/lists"}