PHPackages                             nemesis/laravel-filter-and-sorting - 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. nemesis/laravel-filter-and-sorting

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

nemesis/laravel-filter-and-sorting
==================================

Filter And Sorting trait

4.0.3(9y ago)726.1k11PHP

Since Jul 4Pushed 5y ago4 watchersCompare

[ Source](https://github.com/nemesis1988/FilterAndSorting)[ Packagist](https://packagist.org/packages/nemesis/laravel-filter-and-sorting)[ RSS](/packages/nemesis-laravel-filter-and-sorting/feed)WikiDiscussions master Synced 6d ago

READMEChangelog (8)Dependencies (3)Versions (30)Used By (1)

### Filter And Sorting Trait

[](#filter-and-sorting-trait)

#### Подключение

[](#подключение)

Подключите FilterAndSorting трейт к модели. Если вы хотите получать вложенные модели, нужно объявить метод extraFields(),

который будет возвращать список реляций, которые можно получить во вложениях. Как это использовать, будет описано ниже

```
    class SomeModel extends Model
    {
        use FilterAndSorting;

        ...

        public function extraFields()
        {
            return ['someRelation'];
        }

        ...

        public function someRelation()
        {
            return $this->hasOne(SomeRelation::class);
        }
    }
```

Он подключается как scope к модели, что бы использовать, при запросе к модели нужно его вызвать:

```
  public function index(Request $request)
  {
      return SomeModel::setFilterAndRelationsAndSort($request)->get()
  }
```

#### Использование фильтра

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

Для фильтрации нужно использовать get параметр filter, в который помещается json с полями для фильтрации и параметрами.

Допустимые параметры:

isNull - не обязательный параметр, принимает true или false, добавляет к запросу AND $key IS NULL или AND $key IS NOT NULL

operation - логическая операция для выборки, принимает '&gt;','&lt;','&gt;=','&lt;=','&lt;&gt;','not in','in','like'

value - значение для выборки, может быть массивом, если используется "operation":"in" или "operation":"not in"

from и to - интервал. Могут работать по одиночке. Если приходят даты - они автоматически преобразуются в "компьютерный формат", так же можно передавать числа. Используются операторы &gt;= и &lt;=, т.е. значения from и to включаются в выборку.

Можно обращаться без параметров, а просто писать {"id":1}, тогда будет выполнен запрос WHERE id = 1 (AND подставится, если есть еще параметры выборки)

Примеры запросов:

/message?filter={"created\_at":{"from":"2016-02-20","to":"2016-02-24 23:59:59"}, "id":{"operation":"not in", "value":\[2,3,4\]}}

/message?filter={"id":{"from":2,"to":5}}

/message?filter={"id":{"to":5}} и /message?filter={"id":{"operation":"&lt;=","value":5}} - эквивалентны

/message?filter={"updated\_at":{"isNull":true}}

/message?filter={"answer":{"operation":"like","value":"Partial search string"}} - псевдополнотекстовый поиск, добавляет услове вида: WHERE answer LIKE "%Partial search string%"

/message?filter={"answer":"Full search string"} - точный поиск по строке

Фильтр позволяет фильтровать по вложенным моделям:

/message?filter={"user.name":"asd"}

Вложенные модели должны быть разрешены в методе extraFields, фильтровать можно аналогично фильтру по текущей модели

#### Использование фильтра вложенных моделей

[](#использование-фильтра-вложенных-моделей)

Для фильтрации нужно использовать get параметр filterExpand, работает аналогично обычному фильтру, только фильтрует данные во вложенных моделях

#### Использование сортировки

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

Сортировать можно по текущей модели, или по вложенной. Для сортировки необходимо передавать get параметр sort.

По умолчанию идет сортировка ASC, если нужно сделать DESC - перед полем для сортировки нужно ставить "-"/

Пример сортировки:

/message?sort=id

/message?sort=-id

/message?sort=user.name

#### Получение вложенных моделей

[](#получение-вложенных-моделей)

Для получения вложенных моделей (реляций), нужно разрешить их в методе модели extraFields() и при запросе добавлять get параметр expand.

Пример запроса:

/message?expand=user

Пример ответа:

{ "id": 1, "message": "some message", "user\_id": 1, ... "user": { "id": 1, "name": "Some username", ... } }

###  Health Score

37

—

LowBetter than 81% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity27

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity74

Established project with proven stability

 Bus Factor1

Top contributor holds 71.4% 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 ~59 days

Recently: every ~320 days

Total

27

Last Release

2140d ago

Major Versions

2.0.2 → 3.0.32016-09-19

2.0.3 → 3.0.42016-11-16

1.0.9 → 3.1.82017-03-14

3.1.9 → 4.0.12017-03-21

3.1.10 → 4.0.22017-05-04

### Community

Maintainers

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

---

Top Contributors

[![nemesis1988](https://avatars.githubusercontent.com/u/8348454?v=4)](https://github.com/nemesis1988 "nemesis1988 (5 commits)")[![Fomenko-Slava](https://avatars.githubusercontent.com/u/16922517?v=4)](https://github.com/Fomenko-Slava "Fomenko-Slava (2 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/nemesis-laravel-filter-and-sorting/health.svg)

```
[![Health](https://phpackages.com/badges/nemesis-laravel-filter-and-sorting/health.svg)](https://phpackages.com/packages/nemesis-laravel-filter-and-sorting)
```

###  Alternatives

[backpack/crud

Quickly build admin interfaces using Laravel, Bootstrap and JavaScript.

3.4k3.8M227](/packages/backpack-crud)[leantime/leantime

Open source project management system for non-project managers. Simple like Trello, powerful like Jira. Built with neurodiversity in mind.

11.3k4.0k](/packages/leantime-leantime)[dcat-plus/laravel-admin

dcat-plus admin

1494.6k10](/packages/dcat-plus-laravel-admin)[shopware/elasticsearch

Elasticsearch for Shopware

144.1M21](/packages/shopware-elasticsearch)[ronasit/laravel-helpers

Provided helpers function and some helper class.

2087.0k31](/packages/ronasit-laravel-helpers)[ronasit/laravel-entity-generator

Provided console command for generating entities.

2053.6k](/packages/ronasit-laravel-entity-generator)

PHPackages © 2026

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