Laravel 9 pagination with search filter

Sometimes we have to filter data from a table in Laravel using the search keyword provided by users. Here we provide search functionality with pagination in Laravel 9.

Answers 1
  • Pagination with search filter in Laravel 9

    //Run below command to make HomeController

    php artisan make:controller HomeController

    routes\web.php

    use App\Http\Controllers\HomeController;
    Route::any('/home', [HomeController::class, 'index'])->name('user');
    

    app\Http\Controllers\HomeController.php

    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use App\Models\User;
    class HomeController extends Controller
    {
        public function index(Request $request){
            $users = User::paginate(2);
            $search = $request->q;
            
            if($search!=""){
                $users = User::where(function ($query) use ($search){
                    $query->where('name', 'like', '%'.$search.'%')
                        ->orWhere('email', 'like', '%'.$search.'%');
                })
                ->paginate(2);
                $users->appends(['q' => $search]);
            }
            else{
                $users = User::paginate(2);
            }
    
            return view('home', compact('users'));
        }
    }
    

    resources\views\home.blade.php

    <form action="{{ route('user') }}" method="POST">
        @csrf
        <input type="text" name="q" placeholder="search by user name and email..." />
        <button type="submit"> Search </button>
    </form>
    <table class="table table-bordered">
        <thead>
            <tr>
                <th>First Name</th>
                <th>Email</th>
            </tr>
        </thead>
        <tbody>
            @foreach($users as $user)
            <tr>
                <td>{{ $user->name }}</td>
                <td>{{ $user->email }}</td>
            </tr>
            @endforeach
        </tbody>
    </table>
    <div>
        {{ $users->links() }}
    </div>
    
    0

    You have to create a controller using php artisan make:controller HomeController.

    Define route in web.php

    Create controller method in HomeController class.

    You also have to create a blade file home.blade.php in resources/views directory. 

     

  • Back to code snippet queries related laravel

Related queries helps you to understand and may also used for implementation of current code snippet