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>
Converting Pagination Results To JSON
The Laravel paginator result classes implement the Illuminate\Contracts\Support\Jsonable
Interface 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. 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.

Krunal Lathiya is a seasoned Computer Science expert with over eight years in the tech industry. He boasts deep knowledge in Data Science and Machine Learning. Versed in Python, JavaScript, PHP, R, and Golang. Skilled in frameworks like Angular and React and platforms such as Node.js. His expertise spans both front-end and back-end development. His proficiency in the Python language stands as a testament to his versatility and commitment to the craft.
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.
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!
great job! This was really helpful!
Nice tutorial
Display the data to the frontend.
You have a github link?
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
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.
Thanks!!!!