Основы

Вы просматриваете документацию старой версии MoonShine. Рассмотрите возможность обновления вашего проекта до MoonShine 2.x.

# Добавление фильтра

Наследует Fields * имеет те же возможности

Фильтры отображаются на главной странице ресурса, для фильтрации данных. Они наследуются от соответствующих полей, поэтому им доступны все методы этих полей.

Фильтры работают абсолютно так же как и поля, за тем исключением, что объявляется в методе ресурса filters

use MoonShine\Filters\BelongsToFilter;
use MoonShine\Filters\BelongsToManyFilter;
use MoonShine\Filters\DateRangeFilter;
use MoonShine\Filters\SlideFilter;
use MoonShine\Filters\SwitchBooleanFilter;
use MoonShine\Filters\TextFilter;
 
//...
 
public function filters(): array
{
return [
TextFilter::make('Title'),
 
BelongsToFilter::make('Author', resource: 'name')
->nullable()
->canSee(fn() => auth('moonshine')->user()->moonshine_user_role_id === 1),
 
TextFilter::make('Slug'),
 
BelongsToManyFilter::make('Categories')
->select(),
 
DateRangeFilter::make('Created at'),
 
SlideFilter::make('Age')
->fromField('age_from')
->toField('age_to')
->min(0)
->max(60),
 
SwitchBooleanFilter::make('Active')
];
}
 
//...

# Кастомный запрос

Используя метод customQuery можно создать кастомный запрос для фильтра

use MoonShine\Filters\DateRangeFilter;
use MoonShine\Filters\TextFilter;
 
//...
 
public function filters(): array
{
return [
TextFilter::make('Title')
->customQuery(fn(Builder $query, $value) => $query->where('title', 'LIKE', "%${value}%")),
 
DateRangeFilter::make('Created at')
->customQuery(function (Builder $query, $values) {
return $query
->when($values['from'] ?? null, function ($query, $fromDate) {
$query->whereDate('created_at', '>=', Carbon::parse($fromDate));
})
->when($values['to'] ?? null, function ($query, $toDate) {
$query->whereDate('created_at', '<=', Carbon::parse($toDate));
});
}),
];
}
 
//...