PHPackages                             chocofamilyme/phalcon-query-builder-filters - 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. chocofamilyme/phalcon-query-builder-filters

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

chocofamilyme/phalcon-query-builder-filters
===========================================

A phalcon package to handle query builder filtering

1.0.0(4y ago)111.2k↓66.7%BSD-3-ClausePHPPHP &gt;= 7.0.0

Since Apr 8Pushed 4y ago4 watchersCompare

[ Source](https://github.com/chocofamilyme/query-builder-filters)[ Packagist](https://packagist.org/packages/chocofamilyme/phalcon-query-builder-filters)[ RSS](/packages/chocofamilyme-phalcon-query-builder-filters/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (1)Dependencies (1)Versions (4)Used By (0)

Phalcon - Query Builder Filters
===============================

[](#phalcon---query-builder-filters)

Библиотека для динамической фильтрации данных через Query Builder фреймворка Phalcon

Установка
---------

[](#установка)

С помощью Composer

```
$ composer require chocofamilyme/phalcon-query-builder-filters
```

Использование
-------------

[](#использование)

1. Нужно создать класс фильтра, который будет наследоваться у абстракного класса `Chocofamily\QueryBuilderFilters\BaseFilter`

Затем вам нужно определить логику фильтра, следуя этим правилам:
- Строка запроса без соответствующего метода фильтра игнорируется
- Пустые строки игнорируются
- Все ключи по умолчанию переводятся на camelCase
- Значение каждого ключа запроса инджектится в соответствующий метод фильтра.
- Вы можете получить доступ к экземпляру Builder-a (`Phalcon\Mvc\Model\Query\Builder`) , используя `$this-> builder`

**Пример**:

Для фильтрации данных по следующему URL-запросу:

`http://yourdomain.com/api/users?gender=male&working=1 `

Нам нужно написать следующие методы:

```
namespace RestAPI\Models\Filters;

use Chocofamily\QueryBuilderFilters\BaseFilter;

class UserFilter extends BaseFilter
{
    public function gender($value)
    {
        return $this->builder->andWhere('RestAPI\Models\User.gender = :gender:', [
                    'gender' =>  $value
                ]);
    }

    public function working($value)
    {
        return $this->builder->andWhere('RestAPI\Models\Profile.is_working = :isWorking:', [
                            'isWorking' =>  $value
                        ]);
    }
}
```

2 . В модели Phalcon, нужно добавить имплементацию интерфейса `Chocofamily\QueryBuilderFilters\Contracts\HasFilters` и реализовать метод `getFilterClass`

```
namespace RestAPI\Models;

use Chocofamily\QueryBuilderFilters\Contracts\HasFilters;
use RestAPI\Models\Filters\UserFilter;
use Phalcon\Mvc\Model;

class User extends Model implements HasFilters
{

    /**
     * @return string
     */
    public function getFilterClass(): string
    {
        return UserFilter::class;
    }

}
```

3 . Теперь мы можем применить использовать фильтрацию:

```
public function getFilteredUsers()
{
    $filterHandler = new FilterHandler();

    $filters = [
        'is_working'        =>  true,
        'gender'            =>  1,
        'not_exist_column'  =>  'test' // так как такого метода у нас нету, этот фильтр проигнорируется
    ];

    $builder = $this->modelsManager->createBuilder()
                            ->columns(
                                [
                                    'RestAPI\Models\User.id',
                                    'RestAPI\Models\User.name',
                                    'RestAPI\Models\User.gender',
                                    'RestAPI\Models\Profile.is_working',
                                    'RestAPI\Models\Profile.is_active'
                                ]
                            )
                            ->from('RestAPI\Models\User')
                            ->innerJoin('RestAPI\Models\Profile', 'RestAPI\Models\User.id = RestAPI\Models\Profile.user_id')
                            ->orderBy('is_active DESC');

    $filteredBuilder = $filterHandler->handle($builder, $filters);
    return $filteredBuilder->getQuery()->execute();
}
```

4 . Также для удобства можно добавить обработчик фильтра в DI

```
use Chocofamily\QueryBuilderFilters\FilterHandler;

$di = \Phalcon\Di::getDefault();
    $di->set('query-builder-filter', function () use ($di) {
      return new FilterHandler();
    });
```

TODO
----

[](#todo)

- Добавить alias для запросов
- Покрыть код юнит тестами
- Дописать документацию

###  Health Score

31

—

LowBetter than 68% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity25

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity57

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% 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 ~798 days

Total

2

Last Release

1799d ago

Major Versions

0.1.0 → 1.0.02021-06-15

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/42729426?v=4)[Chocofamily](/maintainers/chocofamilyme)[@chocofamilyme](https://github.com/chocofamilyme)

---

Top Contributors

[![AidynMakhataev](https://avatars.githubusercontent.com/u/19181566?v=4)](https://github.com/AidynMakhataev "AidynMakhataev (2 commits)")

### Embed Badge

![Health badge](/badges/chocofamilyme-phalcon-query-builder-filters/health.svg)

```
[![Health](https://phpackages.com/badges/chocofamilyme-phalcon-query-builder-filters/health.svg)](https://phpackages.com/packages/chocofamilyme-phalcon-query-builder-filters)
```

###  Alternatives

[doctrine/orm

Object-Relational-Mapper for PHP

10.2k285.3M6.2k](/packages/doctrine-orm)[jdorn/sql-formatter

a PHP SQL highlighting library

3.9k115.1M102](/packages/jdorn-sql-formatter)[illuminate/database

The Illuminate Database package.

2.8k52.4M9.4k](/packages/illuminate-database)[ramsey/uuid-doctrine

Use ramsey/uuid as a Doctrine field type.

90440.3M211](/packages/ramsey-uuid-doctrine)[reliese/laravel

Reliese Components for Laravel Framework code generation.

1.7k3.4M16](/packages/reliese-laravel)[wildside/userstamps

Laravel Userstamps provides an Eloquent trait which automatically maintains `created\_by` and `updated\_by` columns on your model, populated by the currently authenticated user in your application.

7511.7M13](/packages/wildside-userstamps)

PHPackages © 2026

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