Skip to main content

Overview

The BooleanFilter class provides a checkbox or toggle input for filtering by boolean values. It applies a WHERE clause with a boolean comparison.

Creating a BooleanFilter

make
static method
required
Creates a new BooleanFilter instance.
field
string
required
The database column name to filter on
BooleanFilter::make('active')

Available Methods

label

label
method
Sets the display label for the filter.
label
string
required
The label text to display
BooleanFilter::make('active')
    ->label('Active Only')

key

key
method
Overrides the internal key used for the filter (defaults to field name with dots replaced by underscores).
key
string
required
Custom key identifier
BooleanFilter::make('is_verified')
    ->key('verified_filter')

default

default
method
Sets a default value for the filter.
value
mixed
required
The default value (true or false)
BooleanFilter::make('featured')
    ->default(false)

initialValue

initialValue
method
Sets an initial value that is pre-applied when the table first loads.
value
mixed
required
The initial value to apply (true or false)
BooleanFilter::make('active')
    ->initialValue(true)

filter

filter
method
Provides a custom query callback to override the default filter behavior.
callback
Closure
required
A closure that receives Builder $query and mixed $value and returns the modified Builder
BooleanFilter::make('has_orders')
    ->label('Has Orders')
    ->filter(function (Builder $query, mixed $value) {
        if ($value) {
            return $query->whereHas('orders');
        }
        return $query->whereDoesntHave('orders');
    })

groupClass

groupClass
method
Sets a CSS class for the filter wrapper element.
class
string
required
CSS class name(s)
BooleanFilter::make('active')
    ->groupClass('col-md-3')

labelClass

labelClass
method
Sets a CSS class for the label element.
class
string
required
CSS class name(s)
BooleanFilter::make('verified')
    ->labelClass('font-medium text-gray-800')

inputClass

inputClass
method
Sets a CSS class for the input element.
class
string
required
CSS class name(s)
BooleanFilter::make('active')
    ->inputClass('form-check-input')

Default Behavior

By default, BooleanFilter applies a WHERE clause with boolean comparison:
$query->where($fieldName, (bool) $value)
The filter casts the value to a boolean, so any truthy value will match true, and any falsy value will match false.

Complete Examples

Basic Usage

use Livewire\Tables\Filters\BooleanFilter;

public function filters(): array
{
    return [
        BooleanFilter::make('active')
            ->label('Show Active Only'),

        BooleanFilter::make('verified')
            ->label('Verified Users'),

        BooleanFilter::make('featured')
            ->label('Featured Items')
            ->initialValue(false),
    ];
}

Custom Filter Logic

use Livewire\Tables\Filters\BooleanFilter;
use Illuminate\Database\Eloquent\Builder;

public function filters(): array
{
    return [
        BooleanFilter::make('has_purchases')
            ->label('Has Purchases')
            ->filter(function (Builder $query, mixed $value) {
                if ($value) {
                    return $query->whereHas('purchases');
                }
                return $query;
            }),

        BooleanFilter::make('recent')
            ->label('Created in Last 30 Days')
            ->filter(function (Builder $query, mixed $value) {
                if ($value) {
                    return $query->where('created_at', '>=', now()->subDays(30));
                }
                return $query;
            }),
    ];
}

Usage in Table Component

use App\Models\User;
use Illuminate\Database\Eloquent\Builder;
use Livewire\Tables\Filters\BooleanFilter;
use Livewire\Tables\Filters\SelectFilter;
use Livewire\Tables\Livewire\DataTableComponent;

class UsersTable extends DataTableComponent
{
    public function query(): Builder
    {
        return User::query();
    }

    public function filters(): array
    {
        return [
            BooleanFilter::make('active')
                ->label('Active Only')
                ->initialValue(true),

            BooleanFilter::make('email_verified_at')
                ->label('Verified Email')
                ->filter(function (Builder $query, mixed $value) {
                    if ($value) {
                        return $query->whereNotNull('email_verified_at');
                    }
                    return $query->whereNull('email_verified_at');
                }),

            SelectFilter::make('role')
                ->label('Role')
                ->setOptions([
                    'admin'  => 'Administrator',
                    'editor' => 'Editor',
                    'viewer' => 'Viewer',
                ]),
        ];
    }
}

UI Rendering

The boolean filter typically renders as a checkbox with the label appearing next to it. The exact appearance depends on your theme (Tailwind, Bootstrap 5, or Bootstrap 4).

Build docs developers (and LLMs) love