Skip to content
全部文档

三态筛选器

简介

三态筛选器(Ternary filters)可让你轻松创建具有三种状态的选择筛选器——通常为 true、false 和空白。若要将名为 is_featured 的列筛选为 truefalse,可以使用三态筛选器:

php
use Filament\Tables\Filters\TernaryFilter;

TernaryFilter::make('is_featured')
三态筛选器三态筛选器

对可空列使用三态筛选器

另一种常见模式是使用可空列。例如,使用 email_verified_at 列筛选已验证和未验证用户时,未验证用户在该列中的时间戳为 null。要应用该逻辑,可以使用 nullable() 方法:

php
use Filament\Tables\Filters\TernaryFilter;

TernaryFilter::make('email_verified_at')
    ->nullable()

自定义三态筛选器使用的列

用于限定查询范围的列名即为筛选器名称。要自定义它,可以使用 attribute() 方法:

php
use Filament\Tables\Filters\TernaryFilter;

TernaryFilter::make('verified')
    ->nullable()
    ->attribute('status_id')

自定义三态筛选器选项标签

你可以自定义三态筛选器各状态使用的标签。true 选项标签可用 trueLabel() 方法自定义;false 选项标签可用 falseLabel() 方法自定义;空白(默认)选项标签可用 placeholder() 方法自定义:

php
use Illuminate\Database\Eloquent\Builder;
use Filament\Tables\Filters\TernaryFilter;

TernaryFilter::make('email_verified_at')
    ->label('Email verification')
    ->nullable()
    ->placeholder('All users')
    ->trueLabel('Verified users')
    ->falseLabel('Not verified users')

自定义三态筛选器如何修改查询

你可以使用 queries() 方法,自定义三态筛选器各状态下查询如何变化:

php
use Illuminate\Database\Eloquent\Builder;
use Filament\Tables\Filters\TernaryFilter;

TernaryFilter::make('email_verified_at')
    ->label('Email verification')
    ->placeholder('All users')
    ->trueLabel('Verified users')
    ->falseLabel('Not verified users')
    ->queries(
        true: fn (Builder $query) => $query->whereNotNull('email_verified_at'),
        false: fn (Builder $query) => $query->whereNull('email_verified_at'),
        blank: fn (Builder $query) => $query, // In this example, we do not want to filter the query when it is blank.
    )

筛选软删除记录

TrashedFilter 可用于筛选软删除记录。它是 Filament 内置的一种三态筛选器,可如下使用:

php
use Filament\Tables\Filters\TrashedFilter;

TrashedFilter::make()