PHP code example of 16hands / filament-dynamic-filter
1. Go to this page and download the library: Download 16hands/filament-dynamic-filter library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
16hands / filament-dynamic-filter example snippets
use Filament\Tables\Contracts\HasTable;
use Illuminate\Database\Eloquent\Builder;
use SixteenHands\FilamentDynamicFilter\DynamicFilter;
public function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('packhouse.packhouse_name'),
TextColumn::make('grade'),
TextColumn::make('variety.variety_name'),
])
->filters([
// Basic filter - column path matches query column
DynamicFilter::make(
name: 'packhouse_filter',
column: 'packhouse.packhouse_name',
queryColumn: 'packhouses.packhouse_name'
),
// With options
DynamicFilter::make(
name: 'grade_filter',
column: 'grade',
queryColumn: 'grade',
label: 'Grade',
searchable: true
),
// With custom option labels (booleans, enums, etc.)
DynamicFilter::make(
name: 'active_filter',
column: 'is_active',
queryColumn: 'is_active',
optionsMap: [
1 => 'Active',
0 => 'Inactive',
],
),
// With a custom options query
DynamicFilter::make(
name: 'status_filter',
column: 'status',
queryColumn: 'status',
optionsQuery: fn (HasTable $livewire, Builder $query) => $query->whereNotNull('status')
),
]);
}
DynamicFilter::multiple(
name: 'variety_filter',
column: 'variety.variety_name',
queryColumn: 'varieties.variety_name',
searchable: true
)
DynamicFilter::make(
name: 'customer_filter',
column: 'customer.name',
queryColumn: 'customers.name',
searchable: true,
lazy: true
)
DynamicFilter::make(
name: 'status_filter',
column: 'status',
queryColumn: 'status',
searchable: true
)
DynamicFilter::relationship(
name: 'supplier_filter',
column: 'supplier.name',
relationship: 'supplier',
relationshipColumn: 'name',
multiple: true
)
DynamicFilter::relationship(
name: 'supplier_filter',
column: 'supplier.name',
relationship: 'supplier',
relationshipColumn: 'name',
optionsQuery: fn (HasTable $livewire, Builder $query) => $query
->getModel()
->supplier()
->getRelated()
->newQuery()
->where('is_active', true)
)
DynamicFilter::make(
name: 'admin_only_filter',
column: 'internal_code',
queryColumn: 'internal_code',
panels: ['admin'] // Only shows in admin panel
)
return [
'cache_ttl' => 300,
'max_options' => null,
'cache_scope' => 'user', // user | tenant | global
];
'tenant_key' => null,
'tenant_resolver' => fn () => tenant('id'),