mohamedsaad/dynamic-filters
Composer 安装命令:
composer require mohamedsaad/dynamic-filters
包简介
Dynamic filtering package for Laravel models with support for relations and custom operators
README 文档
README
A powerful package to add dynamic filtering, searching, sorting, and column selection to your Laravel models and API endpoints.
Installation
Install the package via Composer:
composer require mohamedsaad/dynamic-filters
Publish the configuration file:
php artisan vendor:publish --tag=dynamic-filters-config
Configuration File
The configuration file will be published to config/dynamic-filters.php:
<?php return [ /* |-------------------------------------------------------------------------- | Allowed Operators |-------------------------------------------------------------------------- | Operators allowed for filtering. */ 'allowed_operators' => ['=', 'like', 'in', 'between', '>', '<', '>=', '<='], /* |-------------------------------------------------------------------------- | Default Relation Column |-------------------------------------------------------------------------- | When filtering by relation directly (e.g., ?filters[organization]=3), | this column will be used. */ 'default_relation_column' => 'id', /* |-------------------------------------------------------------------------- | Allowed Sorting Columns |-------------------------------------------------------------------------- | Restrict sorting to specific columns. Leave empty to allow all. */ 'allowed_sorting_columns' => [], ];
Model Setup
Add the HasDynamicFilters trait to your Eloquent model and optionally define searchable columns:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use MohamedSaad\DynamicFilters\Traits\HasDynamicFilters; class User extends Model { use HasDynamicFilters; // Optional: Define searchable columns for the "search" feature protected array $searchable = ['name', 'email', 'profile.city']; }
Controller Setup
Apply filters, search, sorting, and column selection dynamically in your controller:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; class UserController extends Controller { public function index(Request $request) { // Apply filters, search, sorting, and columns dynamically $users = User::applyFilters($request)->paginate(15); return response()->json($users); } }
API Examples
Apply Filters to Specific Columns
GET /users?filters[status]=active&filters[age][operator]=>&filters[age][value]=25
Filtering Relations
GET /users?filters[organization]=2
GET /users?filters[organization.name]=CompanyX
Global Search
Search across all predefined searchable columns:
GET /users?search=ahmed
Column Selection
Select only the columns you need:
GET /users?columns[]=id&columns[]=name
Multi-level Sorting
Sort by multiple columns (prefix with - for descending):
GET /users?sort=-created_at,name,profile.city
Combined Example
Combine everything in one request:
GET /users?search=ahmed&filters[status]=active&filters[organization.id]=3&columns[]=id&columns[]=name&sort=-created_at,email
Using with API Resources
Integrate with Laravel API Resources:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; use App\Http\Resources\UserResource; class UserController extends Controller { public function index(Request $request) { $users = User::applyFilters($request)->paginate(); return UserResource::collection($users); } }
License
This package is open-sourced software licensed under the MIT license.
mohamedsaad/dynamic-filters 适用场景与选型建议
mohamedsaad/dynamic-filters 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 1 次下载、GitHub Stars 达 3, 最近一次更新时间为 2025 年 08 月 07 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 mohamedsaad/dynamic-filters 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 mohamedsaad/dynamic-filters 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 1
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 3
- 点击次数: 17
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: proprietary
- 更新时间: 2025-08-07