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(5mo ago)1180↓50%MITPHPPHP ^8.1

Since Dec 19Pushed 5mo 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 1mo ago

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 83% of packages

Maintenance73

Regular maintenance activity

Popularity17

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity43

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

150d 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

[swisnl/laravel-fulltext

Fulltext indexing and searching for Laravel

184104.5k6](/packages/swisnl-laravel-fulltext)[fumeapp/modeltyper

Generate TypeScript interfaces from Laravel Models

196277.9k](/packages/fumeapp-modeltyper)[baijunyao/laravel-scout-elasticsearch

Elasticsearch Driver for Laravel Scout

8023.7k1](/packages/baijunyao-laravel-scout-elasticsearch)[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)
