curvestech / laravel-request-filters
Simpler way to map request queries to database queries in a seamless way that follows single responsibility principle
Installs: 17
Dependents: 0
Suggesters: 0
Security: 0
Stars: 5
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/curvestech/laravel-request-filters
Requires
- php: ^8.0
- illuminate/console: ^8.0|^9.0|^10.0|^11.0|^12.0
- illuminate/database: ^8.0|^9.0|^10.0|^11.0|^12.0
- illuminate/http: ^8.0|^9.0|^10.0|^11.0|^12.0
- illuminate/support: ^8.0|^9.0|^10.0|^11.0|^12.0
README
A simple and elegant way to map request queries to database queries in Laravel, following single responsibility principles.
Installation
composer require curvestech/laravel-request-filters
The service provider will be automatically registered via Laravel's package auto-discovery.
Usage
1. Generate a Filter
php artisan make:filter UserFilter
This creates a filter class in app/Http/Filters/UserFilter.php.
2. Add the Filterable Trait to Your Model
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Curvestech\LaravelRequestFilters\Traits\Filterable; class User extends Model { use Filterable; }
3. Use in Your Controller
<?php namespace App\Http\Controllers; use App\Http\Filters\UserFilter; use App\Models\User; use Illuminate\Http\Request; class UserController extends Controller { public function index(UserFilter $filter) { $users = User::filter($filter)->get(); return response()->json($users); } }
4. Filter Methods
Each public method in your filter class corresponds to a query parameter:
<?php namespace App\Http\Filters; use Curvestech\LaravelRequestFilters\AbstractFilter; use Illuminate\Database\Eloquent\Builder; class UserFilter extends AbstractFilter { // URL: ?name=john public function name(Builder $builder, $value): Builder { return $builder->where('name', 'like', '%' . $value . '%'); } // URL: ?status=active public function status(Builder $builder, $value): Builder { return $builder->where('status', $value); } // URL: ?created_from=2023-01-01 public function createdFrom(Builder $builder, $value): Builder { return $builder->where('created_at', '>=', $value); } }
Examples
Basic Filtering
GET /users?name=john&status=active
Date Range Filtering
GET /users?created_from=2023-01-01&created_to=2023-12-31
Multiple Values
GET /users?ids=1,2,3
# or
GET /users?ids[]=1&ids[]=2&ids[]=3
Requirements
- PHP ^8.0
- Laravel ^8.0|^9.0|^10.0|^11.0|^12.0
License
MIT