PHPackages                             aldemeery/sieve - 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. aldemeery/sieve

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

aldemeery/sieve
===============

A simple, clean and elegant way to filter Eloquent models.

v3.1.1(1y ago)1396.4k↓64.3%2[1 PRs](https://github.com/aldemeery/sieve/pulls)MITPHPPHP ^8.2CI failing

Since Mar 6Pushed 5mo ago5 watchersCompare

[ Source](https://github.com/aldemeery/sieve)[ Packagist](https://packagist.org/packages/aldemeery/sieve)[ RSS](/packages/aldemeery-sieve/feed)WikiDiscussions master Synced yesterday

READMEChangelog (9)Dependencies (14)Versions (16)Used By (0)

Sieve - Clean &amp; Easy Eloquent Filtration
============================================

[](#sieve---clean--easy-eloquent-filtration)

[![Build Status](https://github.com/aldemeery/sieve/actions/workflows/tests.yml/badge.svg)](https://github.com/aldemeery/sieve/actions)[![Total Downloads](https://camo.githubusercontent.com/74473d6d85a804d5db591e3adca7ef31ba501d36efdbf8294a68ec54cda061a8/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f616c64656d656572792f73696576653f6c6162656c3d446f776e6c6f616473)](https://packagist.org/packages/aldemeery/sieve)[![Latest Version](https://camo.githubusercontent.com/c445ec75963086806d041a405c4ecbe98db8880b43e7f261c3d8fc7b13a23534/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f616c64656d656572792f73696576653f6c6162656c3d4c61746573742b56657273696f6e)](https://packagist.org/packages/aldemeery/sieve)[![License](https://camo.githubusercontent.com/aa0c4ca9b067f0c6777743fcc7ee065dcda98b006a2bb9adf8e0b063a5366bdb/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f616c64656d656572792f73696576653f6c6162656c3d4c6963656e7365)](https://github.com/aldemeery/sieve/blob/master/LICENSE)

- [Installation](#installation)
- [Usage](#usage)
    - [Creating Filters](#creating-filters)
    - [Filtering](#filtering)
    - [Mapping Values](#mapping-values)

A minimalist, ultra-lightweight package for clean, intuitive query filtering.

With Sieve, your filtration logic is simplified from something like this:

```
public function index(Request $request)
{
    $query = Product::query();

    if ($request->has('color')) {
        $query->where('color', $request->get('color'));
    }

    if ($request->has('condition')) {
        $query->where('condition', $request->get('condition'));
    }

    if ($request->has('price')) {
        $direction = $request->get('price') === 'highest' ? 'desc' : 'asc';
        $query->orderBy('price', $direction);
    }

    return $query->get();
}
```

to this:

```
public function index(Request $request)
{
    return Product::filter($request->query())->get();
}
```

---

Installation
------------

[](#installation)

Important

This package requires Laravel 11.0 or higher and PHP 8.2 or higher.

You can install the package via composer:

```
composer require aldemeery/sieve
```

---

Usage
-----

[](#usage)

Enabling filtration for a model is as easy as adding the `Aldemeery\Sieve\Concerns\Filterable` trait to it:

```
use Aldemeery\Sieve\Concerns\Filterable;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    use Filterable;

    // ...
}
```

The `Filterable` trait introduces a `filter` [local scope](https://laravel.com/docs/eloquent#local-scopes) to your model, which accepts an associative array for filtration:

```
public function index(Request $request)
{
    return Product::filter($request->query())->get();
}
```

Now you're ready to create your filter classes.

---

### Creating filters

[](#creating-filters)

To create a filter, create a class that implements the `Aldemeery\Sieve\Contracts\Filter` interface.

You can either create a filter class using the `make:filter` artisan command, which will place the filter in the `app/Http/Filters` directory. Alternatively, you can create a filter class manually and place it wherever you prefer:

```
php artisan make:filter Product/ColorFilter
```

This generates a `ColorFilter` class in the `app/Filters/Product` directory:

```
