过滤器
概述
过滤器(Filter)允许你在数据上定义特定的约束,并允许用户限定查询范围,以查找他们所需的信息。可以在 $table->filters() 方法中定义过滤器:
use Filament\Tables\Table;
public function table(Table $table): Table
{
return $table
->filters([
// ...
]);
}

过滤器可以使用静态的 make() 方法创建,并传入其唯一名。然后你应该传入一个回调函数到 query() 中,设置过滤器的查询范围:
use Filament\Tables\Filters\Filter;
use Illuminate\Database\Eloquent\Builder;
Filter::make('is_featured')
->query(fn (Builder $query): Builder => $query->where('is_featured', true))
设置标签
默认情况下,过滤器的标签是有过滤器名生成。你可以使用 label() 方法自定义该标签:
use Filament\Tables\Filters\Filter;
Filter::make('is_featured')
->label('Featured')
可选地,你可以使用 translateLabel() 方法,使其利用 Laravel 的本地化特性自动翻译标签。
use Filament\Tables\Filters\Filter;
Filter::make('is_featured')
->translateLabel() // Equivalent to `label(__('Is featured'))`
自定义过滤器表单
默认情况下,使用 Filter 类创建过滤器会渲染一个 Chcekbox 表单组件。当 Checkbox 被勾选后,query() 函数将会使用表格的查询,过滤表格中的记录。如果 Checkbox 未被勾选,query() 函数会从表格查询中删除。
过滤器完全是建立在 Filament 表单字段之上。他们可以渲染任何表单字段的组合,使用户可以直接交互过滤表格。
使用 Toggle 按钮代替 Checbox
管理用于过滤器的表单字段的最简单示例是,使用 Toggle 按钮替换 Checkbox:
use Filament\Tables\Filters\Filter;
Filter::make('is_featured')
->toggle()

默认使用过滤器
使用 default() 方法,你可以设置默认启用过滤器:
use Filament\Tables\Filters\Filter;
Filter::make('is_featured')
->default()
Select 过滤器
有时候,你会使用 Select 字段而非 Checkbox。当您希望用户可以根据一组预定义选项过滤列字段时,尤其如此。为此,您可以使用 SelectFilter 类创建一个过滤器:
use Filament\Tables\Filters\SelectFilter;
SelectFilter::make('status')
->options([
'draft' => 'Draft',
'reviewing' => 'Reviewing',
'published' => 'Published',
])
通过 options() 传递给过滤器的选项,与传递给 Select 字段的方式一致:

