Skip to content

janakkapadia/filterable

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Filterable Package

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"

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published

Languages