PHP code example of degecko / laravel-nova-multifilter

1. Go to this page and download the library: Download degecko/laravel-nova-multifilter 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/ */

    

degecko / laravel-nova-multifilter example snippets


use DeGecko\NovaMultiFilter\MultiFilter;

public function filters(NovaRequest $request): array
{
    return [
        new MultiFilter('Search', [
            'name' => '%w%',                    // LIKE search (word-boundary aware)
            'email' => '%#%',                    // LIKE search (contains)
            'status' => ['active', 'inactive'],  // Select dropdown
            'created_at' => ['from' => null, 'to' => null], // Date range
        ]),
    ];
}

// Flat array — values are used as both the option value and label
'status' => ['active', 'inactive', 'banned'],

// Associative — keys are stored, values are displayed
'role' => ['admin' => 'Administrator', 'editor' => 'Editor', 'user' => 'User'],

'name' => '%w%',    // Word-boundary search (splits on non-alphanumeric)
'email' => '%#%',   // Simple contains
'phone' => '#%',    // Starts with

'created_at' => ['from' => null, 'to' => null],
'updated_at' => ['from' => null, 'to' => null],

'age' => ['from' => null, 'to' => null, 'type' => 'range'],
'price' => ['from' => null, 'to' => null, 'type' => 'range'],

'permissions' => ['bitwise', [
    'can_edit' => 1,
    'can_delete' => 2,
    'can_publish' => 4,
]],

'email as E-mail' => '%#%',
'created_at as Registered' => ['from' => null, 'to' => null],

use App\Nova\Filters\StatusFilter;
use App\Nova\Filters\CategoryFilter;

new MultiFilter('Filters', [
    'status' => new StatusFilter,
    'category' => new CategoryFilter,
    'name' => '%w%',
]),

(new MultiFilter('Search', [
    'name' => '%w%',
    'active' => ['Yes', 'No'],
]))->handlers([
    'active' => fn($value, $query) => $query->where('is_active', $value === 'Yes'),
]),

(new MultiFilter('Filters', [
    'status' => ['active', 'inactive', 'banned'],
    'role' => ['admin', 'editor', 'user'],
]))->defaults([
    'status' => 'active',
]),

// Scope to current tenant
new MultiFilter('Search', $columns, tap: fn($q) => $q->where('tenant_id', auth()->user()->tenant_id)),

// Include soft-deleted records
new MultiFilter('Search', $columns, tap: fn($q) => $q->withTrashed()),

(new MultiFilter('Search', $columns))->log(),

use DeGecko\NovaMultiFilter\MultiFilter;
use App\Nova\Filters\StatusFilter;

public function filters(NovaRequest $request): array
{
    return [
        (new MultiFilter('User Search', [
            'name' => '%w%',
            'email as E-mail' => '%#%',
            'phone' => '#%',
            'status' => new StatusFilter,
            'role' => ['admin' => 'Admin', 'editor' => 'Editor', 'user' => 'User'],
            'created_at as Registered' => ['from' => null, 'to' => null],
            'age' => ['from' => null, 'to' => null, 'type' => 'range'],
            'permissions' => ['bitwise', ['can_edit' => 1, 'can_delete' => 2, 'can_publish' => 4]],
        ], tap: fn($q) => $q->where('tenant_id', auth()->user()->tenant_id)))
        ->defaults(['role' => 'user'])
        ->handlers([
            'custom' => fn($value, $query) => $query->whereHas('profile', fn($q) => $q->where('bio', 'like', "%$value%")),
        ])
        ->log(),
    ];
}