arielespinoza07/laravel-query-kit
Composer 安装命令:
composer require arielespinoza07/laravel-query-kit
包简介
A Laravel toolkit to handle for handling queries via a criteria pattern.
README 文档
README
Laravel Query Kit is a powerful criteria-based query builder toolkit. It's built with SOLID principles and easy to extend.
🧱 Requirements
- PHP ^8.2
- Laravel ^11.0|^12.0
📦 Installation
composer require arielespinoza07/laravel-query-kit
✨ Features
- ✅ Typed criteria: filters, search, pagination, sorting, soft deletes, and dates
- 🎯 Filter groups with operators (
=,like,between,in,not in, etc.) andAND/ORlogic - 🔀 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
├── src/
| ├── Console/
| | └── Commands/
| | └── stubs/
| ├── Contracts/
| ├── Criteria/
| | └── Sort/
| ├── Exceptions/
| ├── Handlers/
| ├── Providers/
| ├── Service/
| ├── Support/
| | └── Facades/
| └── ValueObjects/
└── tests/
🚀 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() );
- Get the builder
/** @var \Illuminate\Contracts\Database\Query\Builder $builder */ $builder = $query->builder();
- Get the model
/** @var \Illuminate\Database\Eloquent\Model|null $response */ $response = $query->toModel();
- Execute and get the response as a collection
/** @var \Illuminate\Support\Collection $response */ $response = $query->toCollection();
- Execute and get the response paginated
/** @var \Illuminate\Pagination\LengthAwarePaginator $response */ $response = $query->withPagination(page: 1, perPage: 10) ->toPaginated();
- 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);
- 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);
- 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 & Handlers
| Method | Handler |
|---|---|
toModel() |
ModelHandler |
toCollection() |
CollectionHandler |
toPaginated() |
PaginatedHandler |
toJsonResource() |
JsonResourceHandler |
toResourceCollection() |
ResourceCollectionHandler |
Artisan Generators
- Create a new criteria class
WeekOrdersCriteria
php artisan make:criteria WeekOrders
<?php declare(strict_types=1); namespace App\Criteria\Billing; use Illuminate\Contracts\Database\Query\Builder; use Illuminate\Support\Carbon; use LaravelQueryKit\Contracts\CriteriaInterface; final readonly class WeekOrdersCriteria implements CriteriaInterface { private Carbon $date; public function __construct( private string $column = 'created_at', private string $boolean = 'and', ?string $date = null, ) { $this->date = isset($date) ? Carbon::parse($date) : now(); } public function apply(Builder $builder): Builder { $weekDays = [ $this->date->startOfWeek()->format('Y-m-d H:i:s'), $this->date->endOfWeek()->format('Y-m-d H:i:s'), ]; return $builder->whereBetween( column: $this->column, values: $weekDays, boolean: $this->boolean, ); } }
- Create a new custom sort criteria, using a relationship
MonthBillingOrderByCriteria
php artisan make:criteria Sort/MonthBilling -s
<?php declare(strict_types=1); namespace App\Criteria\Sort; use Illuminate\Contracts\Database\Query\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\Relation; use LaravelQueryKit\Contracts\SortCriteriaInterface; final readonly class MonthBillingOrderByCriteria implements SortCriteriaInterface { public function __construct() {} /** * {@inheritDoc} */ public function apply(Builder $builder, Model $model, Relation $relation, string $column, string $direction): Builder { // TODO: Implement apply() method. return $builder; } /** * {@inheritDoc} */ public function supports(Relation $relation): bool { // TODO: Implement supports() method. return true; } }
🧪 Testing
composer test
🤝 Contributing
See CONTRIBUTING for details.
Changelog
See CHANGELOG for details.
Security
Report vulnerabilities by email or private issues.
📜 License
arielespinoza07/laravel-query-kit 适用场景与选型建议
arielespinoza07/laravel-query-kit 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 3 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 08 月 30 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「pagination」 「filter」 「query」 「sort」 「laravel」 「relations」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 arielespinoza07/laravel-query-kit 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 arielespinoza07/laravel-query-kit 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 arielespinoza07/laravel-query-kit 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Nova searchable filter for belongsTo relationships.
Query filtering in your frontend
Anax Database Active Record module for model classes.
Symfony DataGridBundle
Database/ORM-agnostic query construction helper
Data provider for yii2
统计信息
- 总下载量: 3
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 35
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-08-30