janakkapadia/filterable

Enhance your Laravel app with dynamic, customizable filtering for Eloquent models. This package provides an easy setup for multi-parameter filtering, custom logic, and relationship support—perfect for building flexible, data-driven features like admin panels and reports.

Fund package maintenance!
Buy Me A Coffee

Installs: 12

Dependents: 0

Suggesters: 0

Security: 0

Stars: 1

Watchers: 1

Forks: 0

Open Issues: 0

Type:package

0.0.6 2024-12-05 17:02 UTC

This package is auto-updated.

Last update: 2024-12-05 17:04:18 UTC


README

A custom Laravel package for dynamic filtering of models, built to simplify the process of filtering data in Laravel applications.

Installation

  1. Install via Composer

    Run the following command to add the package to your Laravel project:

    composer require janakkapadia/filterable
  2. Usage

    This package provides a command to generate filter models dynamically.

    Creating a New Filter Model:

    php artisan filter:model {ModelName}
  3. Add Filter Trait to Your Model

    use JanakKapadia\Filterable\Traits\Filter;
    
    class YourModel extends Model
    {
        use Filter;
    
        // Additional model code...
    }
  4. Usage In Controller

    Basic filtering:

    public function index(Request $request)
    {
        $data = YourModel::filter()->get();
    }

    With parentheses wrapping where conditions:

    public function index(Request $request)
    {
        $data = YourModel::filter(true)->get();
    }
  5. Request Example

    To filter and sort the data, you can make a request like this:

    GET URL/your-model?sort_by=id&search=title&status=active
    
  6. Example Usage For Model Filter File

    In your filter model (YourModelFilter.php), you can define both filter and sort methods:

    class YourModelFilters extends Filter
    {
        // Define your filterable fields
        protected array $filters = ['search', 'status'];
        
        // Define your sortable fields
        protected array $sort = ['sort_by'];
    
        // Sort method
        public function sort_by($column): void
        {
            $this->builder->orderBy($column);
        }
    
        // Filter methods
        public function search($keyword): void
        {
            $this->builder->where(function ($query) use ($keyword) {
                $query->where('field1', 'like', "%$keyword%")
                    ->orWhere('field2', 'like', "%$keyword%");
            });
        }
    
        public function status($status): void
        {
            $this->builder->where('status', $status);
        }
    }
  7. Query Examples

    Without parentheses (filter()):

    SELECT * FROM your_models 
    WHERE field1 LIKE '%keyword%' 
    OR field2 LIKE '%keyword%' 
    AND status = 'active'
    ORDER BY id DESC

    With parentheses (filter(true)):

    SELECT * FROM your_models 
    WHERE (field1 LIKE '%keyword%' OR field2 LIKE '%keyword%')
    AND (status = 'active')
    ORDER BY id DESC

    The parentheses version ensures proper grouping of conditions and can prevent unexpected results when combining multiple filters.

  8. Advanced Features

    • Parentheses Wrapping: Use filter(true) to wrap where conditions in parentheses for complex queries
    • Filter Chaining: You can chain multiple filter operations together
    • Separate Filter and Sort Fields: Define filterable fields in $filters array and sortable fields in $sort array

"Buy Me A Coffee"