PHPackages                             cchery/turbo-filter - 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. cchery/turbo-filter

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

cchery/turbo-filter
===================

Advanced eloquent custom filter

1.0.0(6mo ago)1459↑142.9%MITPHPPHP ^8.1

Since Dec 19Pushed 6mo agoCompare

[ Source](https://github.com/cchery2512/turbo-filter)[ Packagist](https://packagist.org/packages/cchery/turbo-filter)[ RSS](/packages/cchery-turbo-filter/feed)WikiDiscussions main Synced today

READMEChangelogDependencies (2)Versions (2)Used By (0)

TurboFilter
===========

[](#turbofilter)

**Advanced Eloquent Custom Filter para Laravel**

TurboFilter permite aplicar filtros dinámicos y realizar consultas flexibles sobre tus modelos Eloquent, incluyendo paginación automática, búsquedas y filtros por relaciones anidadas. Todo con una sintaxis simple y reutilizable.

---

**1. Instalación**
------------------

[](#1-instalación)

- Instala el paquete vía Composer:

```
composer require cchery/turbo-filter
```

- Publicar archivo de configuración

```
php artisan vendor:publish --provider="TurboFilter\TurboFilterServiceProvider" --tag=config
```

**2. Conceptos Clave**
----------------------

[](#2-conceptos-clave)

TurboFilter agrega scopes a tus modelos para simplificar consultas complejas.

Los scopes principales son: `filter()`, `getOrPaginate()` y `customGet()`.

**3. Implementación**
---------------------

[](#3-implementación)

### Primero preparamos el modelo

[](#primero-preparamos-el-modelo)

- Para usar TurboFilter en un modelo, solo debes usar el trait `HasTurboFilters` como se muestra a continuación:

```
  namespace App\Models;

  use Illuminate\Database\Eloquent\Model;
  use TurboFilter\Traits\HasTurboFilters;

  class User extends Model{

      use HasTurboFilters;

      const FILTER1 = ['name', 'email', 'departamento_id, 'profile.address.city:city_name,another_field1,another_field2'];
  }
```

- Notas importantes:

    1. Las constantes de filtros definen los únicos campos sobre los que se pueden aplicar búsquedas.
    2. Puedes tener varias constantes si quieres distintos conjuntos de filtros por modelo.
    3. Para relaciones, sigue la estructura: relacion1.relacion2#:campo1,campo2.

### Aplicando los scopes

[](#aplicando-los-scopes)

`filter()`
----------

[](#filter)

- Antes de "filtrar" nesecitas saber que la estructura de datos de filtrado debe ser de la siguiente forma, de lo contrario no funcionará:

1. Filtro por búsqueda simple:

```
{
    "search": "John"
}
//Con este input se filtrará por todas las referencias de "Jhon" con *like*
```

2. Filtro por by:

```
{
  "by": {
      "email": "john@example.com",
      "city_name": "New York",
      "departamento_id": [1,2,3,4,5]
  }
}
/*
  Con este input se filtrará por "email" = "john@example.com", "city_name": "New York" y "departamento_id" sean "1,2,3,4 o 5"
  usando la condición *where* para los valores simples y *whereIn* para los arreglos.
*/
```

\*\* Nota: tanto `search` como `by` pueden ir en el mismo payload de búsqueda

### En el controller

[](#en-el-controller)

```
$users = User::filter(User::FILTER1)->where('active', 1)->get();
```

Opcionalmente, puedes pasar el payload manualmente:

```
$payload = ['search' => 'john']; // Request o arreglo manual

$users = User::filter(User::FILTER1, $payload)->first();
```

- Importante: Si no se pasa la constante de filtros, `filter()` no buscará en ningún campo ya que este scope solo usa los campos definidos en la constante, y no buscará en otros campos.

`getOrPaginate()`
-----------------

[](#getorpaginate)

- Suponiendo que el input sea un json con esta estructura de datos:

```
{
  "paginate": 10,
  "orderby": {
    "id": "ASC",
    "name": "DESC"
  }
}
//Se paginaría por 10 y se ordenaría por el parámetro id en ascendente y por name en descendente
```

### En el controller

[](#en-el-controller-1)

```
  $users = User::getOrPaginate();
```

\*\* Nota: tanto el scope `filter()`, como el scope `getOrPaginate()` pueden implementarse en la mísma consulta.

`customGet()` =&gt; Este scope es la fusión de `filter()` y `getOrPaginate()`
-----------------------------------------------------------------------------

[](#customget--este-scope-es-la-fusión-de-filter-y-getorpaginate)

- Suponiendo que el input sea un json con esta estructura de datos:

```
{
 "search": "John",
  "by": {
      "departamento_id": [1,2,3,4,5]
  },
  "paginate": 10,
  "orderby": {
    "id": "ASC",
    "name": "DESC"
  }
}
/*
  Se haría una búsqueda que traería a todas las personas en cuyo nombre tengan "Jhon" y se encuentren en los departamentos cuyo codigo sea "1,2,3,4 o 5"
  además paginaría por 10 y se ordenaría por el parámetro id en ascendente y por name en descendente
*/
```

### En el controller

[](#en-el-controller-2)

```
$users = User::customGet(User::FILTER1);
```

\*\* Nota: al usar este scope NO se deben usarse los otros scopes ya que este implementa tanto `filter()` como `getOrPaginate()` en uno solo.

###  Health Score

37

—

LowBetter than 81% of packages

Maintenance67

Regular maintenance activity

Popularity19

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity44

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

Unknown

Total

1

Last Release

196d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/f5dd4095023c110a953b9d5030935c4f3e71af5063018041d64a5578b89d4092?d=identicon)[cchery](/maintainers/cchery)

---

Top Contributors

[![cchery2512](https://avatars.githubusercontent.com/u/25487808?v=4)](https://github.com/cchery2512 "cchery2512 (3 commits)")

### Embed Badge

![Health badge](/badges/cchery-turbo-filter/health.svg)

```
[![Health](https://phpackages.com/badges/cchery-turbo-filter/health.svg)](https://phpackages.com/packages/cchery-turbo-filter)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3355.3M346](/packages/psalm-plugin-laravel)[laravel/ai

The official AI SDK for Laravel.

1.0k3.2M194](/packages/laravel-ai)[yajra/laravel-oci8

Oracle DB driver for Laravel via OCI8

8793.2M25](/packages/yajra-laravel-oci8)[mike-bronner/laravel-model-caching

Automatic caching for Eloquent models.

2.4k90.5k1](/packages/mike-bronner-laravel-model-caching)[glushkovds/phpclickhouse-laravel

Adapter of the most popular library https://github.com/smi2/phpClickHouse to Laravel

2051.5M2](/packages/glushkovds-phpclickhouse-laravel)[api-platform/laravel

API Platform support for Laravel

58171.4k14](/packages/api-platform-laravel)

PHPackages © 2026

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