Want to filter “Reviews” by rating range (e.g. up to 2⭐, 3⭐+, or 2–4⭐)? Here’s a compact Filament table filter using two Select fields and a clean active-filter indicator.

->filters([]))Filter::make('rating') ->schema([ \Filament\Forms\Components\Select::make('min_rating') ->label('Minimum Rating') ->options([ 1 => '1 ⭐', 2 => '2 ⭐', 3 => '3 ⭐', 4 => '4 ⭐', 5 => '5 ⭐', ]) ->placeholder('Any'), \Filament\Forms\Components\Select::make('max_rating') ->label('Maximum Rating') ->options([ 1 => '1 ⭐', 2 => '2 ⭐', 3 => '3 ⭐', 4 => '4 ⭐', 5 => '5 ⭐', ]) ->placeholder('Any'), ]) ->query(function (Builder $query, array $data): Builder { return $query ->when( $data['min_rating'], fn (Builder $query, $minRating): Builder => $query->where('rating', '>=', $minRating), ) ->when( $data['max_rating'], fn (Builder $query, $maxRating): Builder => $query->where('rating', '<=', $maxRating), ); }) ->indicateUsing(function (array $data): ?string { if (! $data['min_rating'] && ! $data['max_rating']) { return null; } if ($data['min_rating'] && $data['max_rating']) { return "Rating: {$data['min_rating']}-{$data['max_rating']} ⭐"; } if ($data['min_rating']) { return "Rating: {$data['min_rating']}+ ⭐"; } return "Rating: up to {$data['max_rating']} ⭐"; }),

schema() renders two selects inside the filter popover.query() applies >= min and/or <= max only when selected.indicateUsing() generates a readable chip like “Rating: 2-4 ⭐” or “Rating: 3+ ⭐”.A few of our Premium Examples: