Skip to content

[테이블.필터] TernaryFilter

개요

삼항 필터는 세 가지 상태(보통 true, false, 그리고 공백)를 가진 select 필터를 쉽게 생성할 수 있게 해줍니다. is_admin이라는 컬럼을 true 또는 false로 필터링하려면, 삼항 필터를 사용할 수 있습니다:

php
use Filament\Tables\Filters\TernaryFilter;

TernaryFilter::make('is_admin')

nullable 컬럼과 함께 삼항 필터 사용하기

또 다른 일반적인 패턴은 nullable 컬럼을 사용하는 것입니다. 예를 들어, 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('이메일 인증')
    ->nullable()
    ->placeholder('모든 사용자')
    ->trueLabel('인증된 사용자')
    ->falseLabel('인증되지 않은 사용자')

삼항 필터가 쿼리를 수정하는 방식 커스터마이징하기

삼항 필터의 각 상태에 따라 쿼리가 어떻게 변경되는지 커스터마이징하려면, queries() 메서드를 사용하세요:

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

TernaryFilter::make('email_verified_at')
    ->label('이메일 인증')
    ->placeholder('모든 사용자')
    ->trueLabel('인증된 사용자')
    ->falseLabel('인증되지 않은 사용자')
    ->queries(
        true: fn (Builder $query) => $query->whereNotNull('email_verified_at'),
        false: fn (Builder $query) => $query->whereNull('email_verified_at'),
        blank: fn (Builder $query) => $query, // 이 예시에서는 공백일 때 쿼리를 필터링하지 않습니다.
    )

소프트 삭제된 레코드 필터링하기

TrashedFilter는 소프트 삭제된 레코드를 필터링하는 데 사용할 수 있습니다. 이는 Filament에 내장된 삼항 필터의 한 종류입니다. 다음과 같이 사용할 수 있습니다:

php
use Filament\Tables\Filters\TrashedFilter;

TrashedFilter::make()

나를 위한 문서 한글화