PHPackages                             hashemi/queryfilter - 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. [Search &amp; Filtering](/categories/search)
4. /
5. hashemi/queryfilter

ActiveLibrary[Search &amp; Filtering](/categories/search)

hashemi/queryfilter
===================

A simple &amp; dynamic package for your eloquent query in laravel. It will help you to write query logic individual for each parameter.

1.3(5y ago)391.1k4MITPHPPHP &gt;=7.1

Since Jun 8Pushed 5y ago3 watchersCompare

[ Source](https://github.com/hashemirafsan/queryfilter)[ Packagist](https://packagist.org/packages/hashemi/queryfilter)[ RSS](/packages/hashemi-queryfilter/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (3)Dependencies (5)Versions (5)Used By (0)

Laravel QueryFilter
===================

[](#laravel-queryfilter)

A simple &amp; dynamic package for your eloquent query in laravel. It will help you to write query logic individual for each parameter.

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

[](#installation)

You can start it from composer. Go to your terminal and run this command from your project root directory.

```
composer require hashemi/queryfilter
```

- If you're using Laravel, then Laravel will automatically discover the package. In case it doesn't discover the package then add the following provider in your `config/app.php`'s **providers** array.

```
Hashemi\QueryFilter\QueryFilterServiceProvider::class
```

- If you're using Lumen, then you'll have to add the following snippet in your `bootstrap/app.php` file.

```
$app->register(Hashemi\QueryFilter\QueryFilterServiceProvider::class)
```

Usage
-----

[](#usage)

Suppose you want use query-filters on `User` model for query. Laravel QueryFilter provide `Filterable` trait . You need to use it on your model. It will add a scope `filter` on your model. Like,

```
class User extends Model
{
    // Use Filterable Trait
    // ....
    use \Hashemi\QueryFilter\Filterable;
    // ....
}
```

Now, you need to create your query filter file where you will write sql logic to generate sql by passing parameter. You can create your filter file by using command,

```
php artisan make:filter UserFilter
```

This command will create `Filters` directory on your `app/` directory. So, you can find the file on `app/Filters/UserFilter.php`. Every method of filter class, represent your passing parameter key. You need to pass your parameter `snake` case and your method name will be like `applyProperty` format. Property name must be write in `Pascal` case.

```
class UserFilter extends \Hashemi\QueryFilter\QueryFilter
{
    public function applyIdProperty($id)
    {
        return $this->builder->where('id', '=', $id);
    }

    public function applyNameProperty($name)
    {
        return $this->builder->where('name', 'LIKE', "%$name%");
    }
}
```

After create that file, when you use your model on you controller to query something, you need to use your scope and pass `UserFilter` class as a parameter. You controller will be look like,

```
class UserController extends Controller
{
    public function index(Request $request, UserFilter $filter)
    {
        $user = User::query()->filter($filter)->get();
        // do whatever
    }
}
```

If you want to pass your custom queries on filter, you can also do that in your filter,

```
class UserController extends Controller
{
    public function index(Request $request, UserFilter $filter)
    {
        $user = User::query()->filter($filter, [
            'username' => 'ssi-anik'
        ])->get();
        // do whatever
    }
}
```

And on your `app\Filters\UserFilter.php` file, you can do something like it,

```
class UserFilter extends \Hashemi\QueryFilter\QueryFilter
{
    public function applyIdProperty($id)
    {
        return $this->builder->where('id', '=', $id);
    }

    public function applyNameProperty($name)
    {
        return $this->builder->where('name', 'LIKE', "%$name%");
    }

    public function applyUsernameProperty($username)
    {
        return $this->builder->where('username', 'LIKE', "%$username%");
    }

}
```

That's it.

Convention
----------

[](#convention)

- Your `*Filter` class should have methods in `apply*Property` format. Where the `*` will be replaced by the StudlyCase Property names. So, if your field name is `first_name`, then the method name should be `applyFirstNameProperty()`.
- If you're passing an extra data to the Model's filter scope like `Model::filter($filter, ['id' => 4])`, then the provided array will take precedence over the request's data.

Caveat
------

[](#caveat)

If your **request** &amp; **provided array** to the `filter` scope cannot find any suitable method, then it'll return the whole table data as `select * from your_table`. Be aware of this issue.

Contributing
------------

[](#contributing)

Pull requests are welcome. For any changes, please open an issue first to discuss what you would like to change.

###  Health Score

32

—

LowBetter than 72% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity29

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 69.2% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~90 days

Total

4

Last Release

1898d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/22c4489646c60d47047d71ea2e26e39e7a3ab6cc864499fd99b21d582ccac9c9?d=identicon)[hashemi](/maintainers/hashemi)

---

Top Contributors

[![hashemirafsan](https://avatars.githubusercontent.com/u/16275582?v=4)](https://github.com/hashemirafsan "hashemirafsan (18 commits)")[![ssi-anik](https://avatars.githubusercontent.com/u/2676602?v=4)](https://github.com/ssi-anik "ssi-anik (8 commits)")

---

Tags

eloquent-filtersfilterslaravel-packagequery-filterlaravelqueryfilterquery-filters

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/hashemi-queryfilter/health.svg)

```
[![Health](https://phpackages.com/badges/hashemi-queryfilter/health.svg)](https://phpackages.com/packages/hashemi-queryfilter)
```

###  Alternatives

[tucker-eric/eloquentfilter

An Eloquent way to filter Eloquent Models

1.8k4.8M26](/packages/tucker-eric-eloquentfilter)[yadahan/laravel-authentication-log

Laravel Authentication Log provides authentication logger and notification for Laravel.

416632.8k5](/packages/yadahan-laravel-authentication-log)[kyslik/laravel-filterable

Using URL query strings to filter Eloquent queries.

11539.0k](/packages/kyslik-laravel-filterable)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

245.2k](/packages/aedart-athenaeum)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
