Laravel ModelSearch это лёгкий, простой в использовании пакет для создания динамических поисковых запросов для специфических моделей с Laravel или Illuminate 5.8.
- Laravel 5.7+
Запустите composer require skyraptor/modelsearch
чтобы установить последнюю версию пакета, после этого выполните composer update
. Пакет зарегистрирует собственный ServiceProvider используя Laravel Package Discovery.
Этот пакет включает собственный конфигурационный файл, который Вам следует опубликовать с помощью команды php artisan vendor:publish
и следуйте инструкциям на экране. В конфигурационном файле вы должны установить namespace для вашей директории с фильтрами и префикс фильтра запроса.
return [
'filtersFQCN' => 'App\\Filters\\',
'requestFilterPrefix' => 'filter_'
];
Для того, чтобы определить фильтр, вы должны создать папку, с таким же названием, как у Вашей модели внутри директории с фильтрами. Внутри этой папки вы можете создать фильтр, специфичный для этой модели.
Например:
path\to\laravel\app\Filters\User\HasId.php
Ваш фильтр должен расширять 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 );
}
}
Префикс фильтра запросов в конфигурации определяет префикс, который используется для фильтра имен в параметрах запроса. Это может быть использовано чтобы позволить пользователю применять фильтры с помощью POST и GET запросов. Это должно быть сделано вручную с помощью вызова метода addRequestFilters
, передав ему экземпляр Request.
Всегда помните о том, что применять фильтры необходимо в a соответствующем порядке.
$search = new ModelSearch( User::class );
$search->addRequestFilters( $request );
$result = $search->result();
Вы можете изменить префикс фильтра поиска, вызвав метод setRequestFilterPrefix()
предоставив новый префикс.
Следующие примеры покажут, как использовать поиск в вашем контроллере:
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();
...
}