Laravel ModelSearch é una semplice libreria per realizzare query di ricerca su specifici Modelli con Laravel o Illuminate 5.8
- Laravel 5.7+
Esegui il comando composer require skyraptor/modelsearch
per installare l'ultima versione della libreria. A seguire esegui composer update
. La libreria registrerá il proprio ServiceProvider usando il gestore pacchetti Laravel.
Il pacchetto include un file di configurazione che dovresti pubblicare con il comando php artisan vendor:publish
e se guendo le istruzione della seguente schermata. Nel file di configurazione devi modificare il namespace relativo alla tua directory dei filtri ed il prefisso della tua filter request.
return [
'filtersFQCN' => 'App\\Filters\\',
'requestFilterPrefix' => 'filter_'
];
Per definire un filtro devi creare un cartella chiamata come il tuo modello all'interno della tua cartella dei filtri. Dentro questa cartella puoi creare un finder specifico per il modello.
Ad esempio:
path\to\laravel\app\Filters\User\HasId.php
Il tuo filtro deve estendere 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 );
}
}
Il prefisso request filter nel file di configurazione definisce il prefisso da usare per i nomi dei filtri nei parametri della request. Ció puó essere usato per permettere all'utente di applicare filtri nelle request POST e GET. Andrá fatto manualmente chiamando il metodo addRequestFilters
e passandogli un'istanza della request.
Ricorda sempre di applicare i filtri nell'ordine corretto.
$search = new ModelSearch( User::class );
$search->addRequestFilters( $request );
$result = $search->result();
Puoi cambiare il prefisso dei filtri di ricerca successivamente chiamando il metodo setRequestFilterPrefix()
, fornendo un nuovo prefisso.
L'esempio seguente mostra come usare la Search nel Controller:
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();
...
}