Фильтры
Доступные тип фильтров:
Обзор фильтров
Alias
Все фильтры имеют alias
. Если в запросе есть параметр с именем alias - фильтр будет применен.
Alias можно задать используя метод alias($alias)
. Если alias не задан - имя фильтра будет использовано в качестве alias.
Заголовок
Заголовок фильтра будет отображаться в качестве подзаголовка, когда фильтр активен. Некоторые фильтры генерируют заголовок сами.
Вы можете переопределить заголовок фильтра используя метод title($title)
. Если $title
- строка, то она будет использована как есть, если замыкание - будет вызвано с параметром запроса:
Filter::field('my_field')->title(function ($value)
{
return 'Parameter Value: ' . $value;
})
Переопределение параметра запроса
Filter::field('title')->value('TODO category')
Создает фильтр по полю title
. Он игнорирует параметр запроса и переопределяет его значением 'TODO category'
.
Важно: параметр запроса должнен иметь значение. Вы не можете применить фильтр используя categories?title
, но categories?title=1
или categories?title=something_else
будут работать.
Фильтр по связанной модели
Необходимо указать поле для сортировки (related_id в примере), связанную модель (App\Related) и поле связанной модели для отображения в качестве заголовока фильтра (firstName). Значение фильтра будет извлечено из параметров запроса.
Filter::related('related_id')->model('App\Related')->display('firstName')
Фильтр по полю
Следующий код будет фильтровать данные по параметру из запроса.
Filter::field('published')
Фильтр со scope
Этот фильтр будет применять scope к вашему запросу.
Filter::scope('myScope')
Вы должны определить scope в вашей модели (подробнее смотрите в документации laravel scope):
public function scopeMyScope($query, $parameter)
{
$query->where('myField', $parameter);
}
Произвольный фильтр
Вы можете создавать свои собственные фильтры ($query
будет билдером запросов eloquent, $parameter
- параметр запроса):
Filter::custom('filter_name')->callback(function ($query, $parameter)
{
$query->where('myField', $parameter);
})->title('My Filter Title')