Основы
Вы просматриваете документацию старой версии 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)); }); }), ];} //...