Laravel 9 pagination with search filter

Created at 03-Mar-2022 , By samar

Laravel 9 pagination with search filter

Good day, guys. In this post, we’ll look at how to solve the "Laravel 9 pagination with search filter" programming puzzle.

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.
  • 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>
    

    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. 

     

Related Queries

Back to code snippet queries related laravel

If you like what you are reading, please consider buying us a coffee ( or 2 ) as a token of appreciation.

Buy Me A Coffee

Don't forget to share this article! Help us spread the word by clicking the share button below.

We appreciate your support and are committed to providing you valuable and informative content.

We are thankful for your never ending support.