solivellaluisalberto/laravelmakefiltersandsorts es un paquete Laravel diseñado para simplificar la aplicación de filtros y ordenamientos en consultas Eloquent, basados en los parámetros de una solicitud HTTP.
- Filtros dinámicos: Soporta operadores como
=
,!=
,>
,<
,>=
,<=
,like
,in
ybetween
. - Búsqueda por varias columnas usando
like
con un separador de|
. - Ordenamientos flexibles en columnas simples o relaciones Eloquent.
-
Instalar a través de Composer:
Para instalar este paquete en tu proyecto Laravel, simplemente ejecuta:
composer require tu-usuario/mipaquete
-
Publicar el Service Provider:
Si utilizas Laravel 5.5 o superior, el Service Provider se registrará automáticamente gracias al autoloading de Composer.
Si no, deberás registrar el Service Provider manualmente en el archivo
config/app.php
:'providers' => [ // Otros providers... SolivellaLuisAlberto\LaravelMakeFiltersAndSorts\MakeFiltersAndSortsServiceProvider::class, ],
El paquete incluye una función estática sanitizeFiltersAndSorts
que toma una instancia de Illuminate\Http\Request
y una consulta Eloquent, y aplica los filtros y ordenamientos especificados en los parámetros filters
y sorts
de la solicitud.
use Illuminate\Http\Request;
use SolivellaLuisAlberto\LaravelMakeFiltersAndSorts\FilterService;
class ExampleController extends Controller
{
public function index(Request $request)
{
$query = MyModel::query();
// Aplicar filtros y ordenamientos usando la función del paquete
$query = FilterService::sanitizeFiltersAndSorts($request, $query);
return $query->get();
}
}
Los filtros deben pasarse como un array en el parámetro filters
del request. Cada filtro debe tener los siguientes campos:
column
: La columna a filtrar.operator
: El operador a usar para filtrar (=
,!=
,>
,<
,>=
,<=
,like
,in
,between
).value
: El valor a comparar con la columna especificada.
{
"filters": [
{ "column": "name", "operator": "like", "value": "John" },
{ "column": "age", "operator": ">=", "value": 30 }
]
}
El parámetro sorts
debe ser un array con la siguiente estructura:
-
column
: La columna por la cual ordenar. -
order
: El tipo de orden (asc
odesc
). -
relationship
(opcional): Si quieres ordenar por una relación, puedes incluir este campo con la siguiente estructura:table
: La tabla de la relación.column
: La columna de la tabla relacionada por la cual ordenar.
{
"sorts": [
{ "column": "created_at", "order": "desc" },
{ "relationship": { "table": "users", "column": "email" }, "order": "asc" }
]
}
Este paquete está bajo la licencia MIT. Consulta el archivo LICENSE para más información.