elefilter/elefilter

A filter package for laravel elequent models

v1.0.0-beta 2025-08-29 06:22 UTC

This package is auto-updated.

Last update: 2025-08-29 06:37:53 UTC


README

EleFilter

EleFilter

Easy and Clean Filter Package For Laravel Applications




Latest Version on Packagist Total Downloads

Elefilter is a Laravel package that helps you easily create and organize filter classes for your Eloquent models.
It provides a simple Artisan command (make:filter) and a clean structure for building reusable filters.

👉 Full documentation available at: here

Requirements

  • PHP 8.2+

Installation

Install the package via Composer:

composer require elefilter/elefilter

If you get stability error, use this command instead.(package is in beta version)

 composer require elefilter/elefilter:"1.0.0-beta"

Make model filterable

Add Filterable Trait to the model

use EleFilter\Traits\Filterable;

class User extends Model
{
    use HasFactory, Filterable;
}

Create a class filter

With command make:filter, you can create a filter class for your model

php artisan make:filter User/Status --column=email_verified_at

Define query

Inside filter class you can define the query conditions inside methods

namespace App\Filters\User;

use EleFilter\Database\ModelFilter;

class StatusFilter extends ModelFilter
{
   protected string $column = "email_verified_at";

   public function verified(): void
   {
      $this->notNull();
   }

   public function unverified(): void
   {
      $this->null();
   }

}

Use filter method

When you want to get results, you can apply the filters like this:

$verifiedUsers = User::filter([ 'status'  => 'verified' ])->get();

$unverifiedUsers = User::filter([ 'status'  => 'unverified' ])->get();

Or use macro methods:

$verifiedUsers = User::verified()->get();

$unverifiedUsers = User::unverified()->get();

Filters with arguments

For filter which needs argument like search filter, you can use default apply method inside class filters :

namespace App\Filters\User;

use EleFilter\Database\ModelFilter;

class SearchFilter extends ModelFilter
{
   protected string $column = "email";

   public function apply(mixed $param): void
   {
      $this->like($param);
   }
}

And call it like this:

$users = User::filter(['search' => 'test'])->get();

Or use macro methods :

$users = User::search('test')->get();

In the front end side in your filter form, assign the class filter names (without suffix Filter) as name attribute for the inputs and values can be method names or the given parameter.An example is like this:

<form method="get">

   <label for="asc" >oldest</label>
   <input type="radio" name="sort" id="asc" value="oldest" />

   <label for="desc" >newest</label>
   <input type="radio" name="sort" id="desc" value="newest" />

   <input type="text" name="search" />

   <select name="status">
      <option value="pending">pending</option>
      <option value="approved">approved</option>
      <option value="rejected">rejected</option>
   </select>

</form>

For detailed documentaion, more examples, possible conflics, limitation and testing, please refer to website.