How to Create Pagination in Laravel [Step-by-step Guide]

To create pagination in Laravel, you can use the “paginate()” method on the query builder or an Eloquent query. The paginate() method sets the proper limit and offsets based on the current page which the user is viewing. Laravel’s paginator is out of the box with the query builder and Eloquent ORM and includes database results. The HTML generated by a paginator is compatible with the Bootstrap CSS framework.

Here are the steps to create Pagination in Laravel:

Step 1: Install Laravel

composer create-project laravel/laravel lapagination --prefer-dist

Set up a database in the .env file.

The next step is to go to the terminal and hit the following command.

php artisan migrate

Step 2: Generating fake data in the database.

If you wonder how to install it, good news – it’s already established for you in Laravel!

We need to write 6-7 lines of code to generate fake users’ data. Go to the database  >>  seeds  >> DatabaseSeeder and add the following lines of code to it.

// DatabaseSeeder.php

/**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $faker = Faker::create();
    	foreach (range(1,1000) as $index) {
	        DB::table('users')->insert([
	            'name' => $faker->name,
	            'email' => $faker->email,
	            'password' => bcrypt('secret'),
	        ]);
        }
    }

First, we created the faker object and then looped through different columns of the users table and assigned one property at a time.

When the loop was iterating, new random data was generated and attached to the particular columns.

So that is how we can make different fake data for each user. Now type the following command to create the fake data.

php artisan db:seed

Now you can see in the database and the users’ table that there are lots of rows added.

The db:seed command runs this file called DatabaseSeeder.php.

Step 3: Display the data to the frontend.

Go to the HomeController.php file and create one function called getUsers().

// HomeController.php

use App\User;

public function getUsers()
{
    $users = User::all();

    return view('index', compact('users'));
}

Define the route inside a web.php  file.

// web.php

Route::get('/users', 'HomeController@getUsers')->name('users');

Create one file inside the resources  >>  views folder called index.blade.php.

<<!DOCTYPE html>
<html>
<head>
   <meta charset="utf-8" />
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <title>Users Data</title>
   <meta name="viewport" content="width=device-width, initial-scale=1">
   <link href="{{ asset('css/app.css') }}" rel="stylesheet" />
</head>
<body>
   <div class="container">
      <table class="table table-striped">
         <thead>
         <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Email</th>
         </tr>
         </thead>
         <tbody>
            @foreach($users as $user)
            <tr>
               <td>{{ $user->id }}</td>
               <td>{{ $user->name }}</td>
               <td>{{ $user->email }}</td>
            </tr>
            @endforeach
         </tbody>
      </table>
   </div>
</body>
</html>

It currently displays all the rows, which is what we want. We want to paginate the data. So let us do that.

Step 4: Paginating Eloquent Results

We need to use the paginate() function provided by the Eloquent model. So replace the method of all() to paginate() and pass the number of rows as a parameter.

// HomeController.php

$users = User::paginate(15);

We need to display the pagination web component at the front end. As discussed earlier, Laravel’s pagination object works well with Bootstrap CSS Framework.

So, we need to add the following code to the table component inside the index.blade.php file.

{{ $users->links() }}

Our whole index.blade.php file looks like this.

<<!DOCTYPE html>
<html>
<head>
   <meta charset="utf-8" />
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <title>Users Data</title>
   <meta name="viewport" content="width=device-width, initial-scale=1">
   <link href="{{ asset('css/app.css') }}" rel="stylesheet" />
</head>
<body>
   <div class="container">
      <table class="table table-striped">
         <thead>
         <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Email</th>
         </tr>
         </thead>
         <tbody>
            @foreach($users as $user)
            <tr>
               <td>{{ $user->id }}</td>
               <td>{{ $user->name }}</td>
               <td>{{ $user->email }}</td>
            </tr>
            @endforeach
         </tbody>
      </table>
      {{ $users->links() }}
   </div>
</body>
</html>

Laravel Pagination Tutorial With Example From Scratch Converting Pagination Results To JSON

The Laravel paginator result classes implement the Illuminate\Contracts\Support\JsonableInterface contract. So write the following code inside a web.php file.

Route::get('users', function () {
    return App\User::paginate(4);
});

So it will return as JSON format data.Laravel Pagination Object So you can use this object and its metadata on the front end to create pagination as per your requirement.

Conclusion

In other frameworks, pagination can be very painful. Laravel makes it a breeze. To use it, first, you have to change your controller and call the paginate() method for fetching the data from the database and then, inside the view, use the render() method to get the paginated data.

That’s it.

9 thoughts on “How to Create Pagination in Laravel [Step-by-step Guide]”

  1. Hi! Krunal

    I have followed several of your examples and they have been of a lot of help. But this one does not run from the beginning.

    First, I got: “Symfony\Component\Debug\Exception\FatalThrowableError : Class ‘Faker’ not found”

    Then, I add at the beginning: “use Faker\Generator as Faker;”
    But I got: “Symfony\Component\Debug\Exception\FatalThrowableError : Call to undefined method Faker\Generator::create()”

    Besides that, I have not created “HomeController.php”
    Can you give me a help, about it, please.

    Reply
    • Problem solved!

      Looking into the subdirectory vendor. I found that I should use “Faker\Factory::create();” instead of “Faker::create();” in the file ‘database/seeds/DatabaseSeeder.php’. For HomeController.php, I just have to created with “php artisan make:controller HomeController”. Everything else is OK. Thanks!

      Reply
  2. Hi i get this error call to undefined function links() in the view
    Call to undefined method AppEmployee::links() (View: /home/izackk/Desktop/Payroll/resources/views/employee/index.blade.php)

    Here is my controller
    public function index()
    {
    //
    $employee = Employee::paginate(1);

    return view(“employee.index”)->with(’employee’, $employee);
    }

    my view

    @extends(‘layouts.app’)

    @section(‘content’)
    @if(count($employee)>0)

    Name
    Gender
    Phone
    Address
    TIN
    Profile Image
    Action

    @foreach($employee as $employee)

    {{ $employee->name }}
    {{ $employee->gender }}
    {{ $employee->phone }}
    {{ $employee->address }}
    {{ $employee->TIN }}
    {{ $employee->profileimage }}
    id }}”>EDIT
    id }}”>DELETE

    @endforeach

    {{ $employee->links() }}

    @else
    Employee not found
    @endif

    @endsection

    Reply
  3. Krunal,
    Nice, great post. Just a question:
    Is possible to add some information on paginations information? For example i’d like to add Request data given.

    Reply

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.