Laraver ModelSearch es un paquete ligero y de facil uso para crear consutas dinamicas sobre Modelos usando Laravel o Illuminate 5.8.
- Laravel 5.7+
Ejecuta composer require skyraptor/modelsearch
para instalar la ultima version del paquete,
luego ejecuta composer update
.
El paquete se registra automaticamente usando el auto descubrimiento de paquetes de Laravel.
Este paquete incluye su propio archivo de configuracion, el cual deberas publicar ejecutando el comando
php artisan vendor:publish
y luego seguir las intrucciones en la pantalla.
En el archivo de configuración tendras que ajustar el namespace de tu directorio de filtros y el prefijo de los filtros
en la solicitud.
return [
'filtersFQCN' => 'App\\Filters\\',
'requestFilterPrefix' => 'filter_'
];
Para definir un filtro, deberas crear una carpeta con el nombre de tu Modelo dentro de la carpeta de filtros.
Dentro de este directorio puedes crear los filtros espeficios para tu Modelo.
Por ejemplo:
\app\Filters\[Model:User]\HasId.php
Tu filtro debe extender de la clase ModelSearch\Contracts\Filter
.
<?php
namespace App\Filters\User;
use ModelSearch\Contracts\Filter;
use Illuminate\Database\Eloquent\Builder;
class HasId implements Filter
{
/**
* Apply a given search value to the builder instance.
*
* @param Builder $builder
* @param integer $value
* @return Builder $builder
*/
public static function apply(Builder $builder, $value)
{
return $builder->where( 'id', $value );
}
}
En la configuración se define el prefijo que que se usara en los parametros de la solicitud.
Estos pueden ser usados para que el usuario aplique filtros en una peticion POST o GET.
Esto tiene que hacerse de manera manual llamando al metodo addRequestFilters
y enviando una instancia de la clase
Request
.
Siempre recuerda aplicar los filtros en el orden correcto.
$search = new ModelSearch(User::class);
$search->addRequestFilters($request);
$result = $search->result();
Puedes cambiar el prefijo de los filtros de busqueda luego de llamar setRequestFilterPrefix()
, y asignando el nuevo
prefijo.
El siguente ejemplo muestra como usar el la Busqueda en tu Controlador:
namespace ModelSearch\ModelSearch;
public function someController( Request $request ) {
...
$search = new ModelSearch( User::class );
$search->addFilters([
'HasId' => 1,
'HasLastName' => 'Doe'
]);
$search->addFilter('SomeFilter', 'value');
$result = $search->result();
// The search can be extended after processing results
$search->addFilter('AnotherFilter', 'value');
$result2 = $search->result();
...
}