Skip to main content

Overview

The TextFilter class provides a text input filter that applies a LIKE query with wildcards to search the specified database field.

Creating a TextFilter

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

Available Methods

label

label
method
Sets the display label for the filter.
label
string
required
The label text to display
TextFilter::make('email')
    ->label('Email Address')

placeholder

placeholder
method
Sets placeholder text for the input field.
text
string
required
The placeholder text
TextFilter::make('name')
    ->placeholder('Search by name...')

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
TextFilter::make('user.name')
    ->key('user_name_filter')

default

default
method
Sets a default value for the filter.
value
mixed
required
The default value
TextFilter::make('search')
    ->default('laravel')

initialValue

initialValue
method
Sets an initial value that is pre-applied when the table first loads.
value
mixed
required
The initial value to apply
TextFilter::make('category')
    ->initialValue('electronics')

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
TextFilter::make('full_name')
    ->label('Name')
    ->filter(function (Builder $query, mixed $value) {
        return $query->where('first_name', 'LIKE', "%{$value}%")
                     ->orWhere('last_name', 'LIKE', "%{$value}%");
    })

groupClass

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

labelClass

labelClass
method
Sets a CSS class for the label element.
class
string
required
CSS class name(s)
TextFilter::make('email')
    ->labelClass('font-bold text-gray-700')

inputClass

inputClass
method
Sets a CSS class for the input element.
class
string
required
CSS class name(s)
TextFilter::make('email')
    ->inputClass('form-control-lg')

Default Behavior

By default, TextFilter applies a LIKE query with wildcards on both sides:
$query->where($fieldName, 'LIKE', "%{$value}%")
This performs a case-insensitive substring search on the specified field.

Complete Example

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

public function filters(): array
{
    return [
        TextFilter::make('email')
            ->label('Email Address')
            ->placeholder('Filter by email...')
            ->inputClass('form-control'),

        TextFilter::make('description')
            ->label('Description')
            ->placeholder('Search description...')
            ->filter(function (Builder $query, mixed $value) {
                return $query->where('description', 'LIKE', "%{$value}%")
                             ->orWhere('notes', 'LIKE', "%{$value}%");
            }),
    ];
}

Usage in Table Component

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

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

    public function filters(): array
    {
        return [
            TextFilter::make('name')
                ->label('Name')
                ->placeholder('Search by name...'),

            TextFilter::make('email')
                ->label('Email')
                ->placeholder('Search by email...'),
        ];
    }
}

Build docs developers (and LLMs) love