LaravelPackages.net
Acme Inc.
Toggle sidebar
achillesp/laravel-filterable

Filter eloquent models in Laravel.

413
1
1.0
About achillesp/laravel-filterable

achillesp/laravel-filterable is a Laravel package for filter eloquent models in laravel.. It currently has 1 GitHub stars and 413 downloads on Packagist (latest version 1.0). Install it with composer require achillesp/laravel-filterable. Discover more Laravel packages by achillesp or browse all Laravel packages to compare alternatives.

Last updated

Filter Laravel Models

This Laravel package provides an abstraction for filtering Eloquent Models based on a request.

Installation

From the command line, run:

composer require achillesp/laravel-filterable

Usage

To be able to filter a model, you need to use the trait Filterable.

use Achillesp\Filterable\Filterable;

class Post extends Eloquent
{
    use Filterable;
}

The filters are defined in their own class, which extends the class Achillesp\Filterable\Filters. In this class you need to provide a $filters array which contains the names of the filters you'd like to use. You then declare a method for each of those filters, that queries the model accordingly. You could use the same filter class for more than one model, or have a different filter class for each model you want to filter.

use Achillesp\Filterable\Filters;

class PostFilters extends Filters
{
    protected $filters = ['category', 'published'];

    protected function category(int $categoryId)
    {
        return $this->builder->where('category_id', $categoryId);
    }

    protected function published(bool $isPublished)
    {
        return $this->builder->where('is_published', $isPublished);
    }
}

You can then filter the model either directly from a request or by giving an array of key-value pais.

To filter based on a request, for example in a controller:

public function search(Request $request)
{
    $filters = new PostFilters($request);
    $posts = Post::filter($filters)->get();
    return $posts;
}

Or to filter based on an array:

$filters = new PostFilters(['category' => 1, 'published' => true]);
$posts = Post::filter($filters)->get();

License

The MIT License (MIT). Please see License File for more information.

Comments