PHPackages                             dibakar/laravel-dynamic-filters - 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. [Database &amp; ORM](/categories/database)
4. /
5. dibakar/laravel-dynamic-filters

ActiveLibrary[Database &amp; ORM](/categories/database)

dibakar/laravel-dynamic-filters
===============================

A flexible and dynamic filtering system for Laravel Eloquent models that allows for easy implementation of complex filtering and searching capabilities in your applications.

1.0.0(7mo ago)0127MITPHPPHP ^8.2CI failing

Since Sep 18Pushed 7mo agoCompare

[ Source](https://github.com/dibakarmitra/laravel-dynamic-filters)[ Packagist](https://packagist.org/packages/dibakar/laravel-dynamic-filters)[ RSS](/packages/dibakar-laravel-dynamic-filters/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (3)Versions (2)Used By (0)

Laravel Dynamic Filters
=======================

[](#laravel-dynamic-filters)

[![Latest Version on Packagist](https://camo.githubusercontent.com/5c672eb233aba084e1f1948e42e5c7b227143e0de7efffb294694ff2863c01ce/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f646962616b61722f6c61726176656c2d64796e616d69632d66696c746572732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/dibakar/laravel-dynamic-filters)[![Total Downloads](https://camo.githubusercontent.com/a5ffd57b485c5882e6567d488defc193f7692ca4abe7b2015344f9a3f13e3e41/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f646962616b61722f6c61726176656c2d64796e616d69632d66696c746572732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/dibakar/laravel-dynamic-filters)[![License](https://camo.githubusercontent.com/eb2838b5cb91065610311a68d5b511359797235c98531f34ab50adbd4ae77b5d/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f646962616b61722f6c61726176656c2d64796e616d69632d66696c746572733f7374796c653d666c61742d737175617265)](https://github.com/dibakar/laravel-dynamic-filters)[![PHP Version](https://camo.githubusercontent.com/40df43f526dcf6e1803baa3e9aafc61d1d19576c05e4d99429a40b1dac20ba2d/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f646962616b61722f6c61726176656c2d64796e616d69632d66696c746572733f7374796c653d666c61742d737175617265)](https://php.net/)[![Laravel Version](https://camo.githubusercontent.com/9e1d1db04318b49a071768f2c4f5e8df58e9f3fdd40a861c379a523219241249/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d31302e782b2d6f72616e67653f7374796c653d666c61742d737175617265)](https://laravel.com/)

A robust and flexible filtering system for Laravel Eloquent models that makes building complex, dynamic queries a breeze. This package provides an elegant, fluent API for filtering, searching, and sorting your Eloquent models with minimal configuration.

✨ Features
----------

[](#-features)

- **Expressive Filtering**: Chainable methods and intuitive syntax for complex queries
- **Advanced Search**: Full-text search with fuzzy matching and term normalization
- **Relationship Support**: Filter across model relationships with nested conditions
- **Type Safety**: Strict type checking and automatic value casting
- **Performance Optimized**: Efficient query building with minimal overhead
- **Security First**: Whitelisting and input validation out of the box
- **Extensible**: Easy to create and register custom filters
- **Modern PHP**: Built with PHP 8.1+ features and type hints

🚀 Installation
--------------

[](#-installation)

### Requirements

[](#requirements)

- PHP 8.1 or higher
- Laravel 10.x or later
- Composer

### Install via Composer

[](#install-via-composer)

```
composer require dibakar/laravel-dynamic-filters
```

### Configuration (Optional)

[](#configuration-optional)

Publish the configuration file to customize the package behavior:

```
php artisan vendor:publish --provider="Dibakar\LaravelDynamicFilters\DynamicFiltersServiceProvider" --tag="config"
```

This will create a `dynamic-filters.php` file in your `config` directory with sensible defaults.

### Service Provider &amp; Facade

[](#service-provider--facade)

The package uses Laravel's package auto-discovery, but you can manually register it in `config/app.php` if needed:

```
'providers' => [
    // Other service providers...
    Dibakar\LaravelDynamicFilters\DynamicFiltersServiceProvider::class,
],

'aliases' => [
    // Other aliases...
    'DynamicFilter' => Dibakar\LaravelDynamicFilters\Facades\DynamicFilter::class,
],
```

📦 Version Compatibility
-----------------------

[](#-version-compatibility)

LaravelPHPPackage12.x8.2+^1.011.x8.2+^1.010.x8.1+^1.0🚀 Quick Start
-------------

[](#-quick-start)

### 1. Prepare Your Model

[](#1-prepare-your-model)

Add the `HasDynamicFilter` trait to your Eloquent model and define the filterable, searchable, and sortable fields:

```
use Dibakar\LaravelDynamicFilters\Traits\HasDynamicFilter;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use HasDynamicFilter;

    /**
     * Fields that can be searched.
     */
    protected $searchable = [
        'title',
        'content',
        'author.name',    // Search in relationships
        'tags.name'       // Search in many-to-many relationships
    ];

    /**
     * Fields that can be filtered with operators.
     */
    protected $filterable = [
        'id',
        'status',
        'category_id',
        'published_at',
        'views',
        'is_featured',
    ];

    /**
     * Fields that can be used for sorting.
     */
    protected $sortable = [
        'created_at' => 'desc',  // Default sort
        'title' => 'asc',
        'views' => 'desc',
    ];

    /**
     * Default filter presets.
     */
    protected $filterPresets = [
        'published' => [
            'status' => 'published',
            'sort' => '-published_at',
        ],
        'popular' => [
            'views' => ['gt' => 1000],
            'is_featured' => true,
            'sort' => '-views',
        ],
    ];
        'status',                   // Simple filter: ?status=published
        'category_id',              // Exact match: ?category_id=5
        'created_at' => [           // Date filtering
            'operators' => ['=', '>', '=', '', '=', 'query())
    ->paginate($request->per_page ?? 15);
```

🚀 Advanced Usage
----------------

[](#-advanced-usage)

### 1. Complex Filter Groups

[](#1-complex-filter-groups)

Create complex filter conditions with AND/OR logic:

```
// Example: (status = 'published' AND (title LIKE '%Laravel%' OR views > 100)) AND (author_id = 1 OR author_id = 2)
$filters = [
    '_group' => [
        'boolean' => 'and',
        'filters' => [
            'status' => 'published',
        ],
        'nested' => [
            [
                'boolean' => 'or',
                'filters' => [
                    'title' => ['like' => '%Laravel%'],
                    'views' => ['gt' => 100],
                ],
            ],
            [
                'boolean' => 'or',
                'filters' => [
                    'author_id' => [1, 2],
                ],
            ],
        ],
    ],
];

$posts = Post::filter($filters)->get();
```

### 2. Custom Filter Classes

[](#2-custom-filter-classes)

For complex filtering logic, create a custom filter class:

```
