Laravel 11 Pagination with Relationship Example
In this post, we will learn how to create paginate with relations in laravel 11 application.
In this example, we will create posts and categories table. we will add has many relation in Category model and belongs to relation with Category table. Then we will create dummy records using the Seeder command. Afterward, we will display those posts pagination with category relationship data. By default, laravel pagination uses Tailwind CSS design, but here we will use Bootstrap 5 design for pagination.
Step for Laravel 11 Paginate with Relations Example
- Step 1: Install Laravel 11
- Step 2: Create Category and Post Table
- Step 3: Create Category and Post Model
- Step 4: Create Dummy Category and Posts
- Step 5: Add Route
- Step 6: Create Controller
- Step 7: Create Blade File
- Run Laravel App
So, let's follow below tutorials:
Step 1: Install Laravel 11
This step is not required; however, if you have not created the Laravel app, then you may go ahead and execute the below command:
composer create-project laravel/laravel example-app
Step 2: Create Category and Post Table
Here, we will create categories and posts table with model. so, let's run the following command:
php artisan make:migration create_categories_table
php artisan make:migration create_posts_table
now, let's update the following migrations:
database/migrations/2024_06_11_035146_create_posts_table.php
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->string('slug');
$table->text('body');
$table->integer('category_id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('posts');
}
};
database/migrations/2024_06_13_175106_create_categories_table.php
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('categories');
}
};
now, Let's run the migration command:
php artisan migrate
Step 3: Create Category and Post Model
Here, we will create Category and Post model using the following command.
php artisan make:model Category
php artisan make:model Post
now, update the model file with belongsTo() and hasMany() relationship:
app/Models/Category.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Category extends Model
{
use HasFactory;
/**
* Write code on Method
*
* @return response()
*/
protected $fillable = [ 'name' ];
/**
* Write code on Method
*
* @return response()
*/
public function posts(): HasMany
{
return $this->hasMany(Post::class);
}
}
app/Models/Post.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Post extends Model
{
use HasFactory;
/**
* Write code on Method
*
* @return response()
*/
protected $fillable = [
'title', 'body', 'slug', 'category_id'
];
/**
* Write code on Method
*
* @return response()
*/
public function category(): BelongsTo
{
return $this->belongsTo(Category::class);
}
}
Step 4: Create Dummy Category and Posts
In this step, we need to run the migration command to create the seeder to create dummy records in categories and posts table
Let's run the migration command:
php artisan make:seeder CreatePosts
noww, we need to update CreatePosts seeder.
database/seeders/CreatePosts.php
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\Post;
use App\Models\Category;
use Illuminate\Support\Str;
class CreatePosts extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$cat1 = Category::create(['name' => 'Laravel']);
$cat2 = Category::create(['name' => 'Laravel 11']);
$posts = [
[
'title' => 'Laravel Product CRUD Tutorial',
'body' => 'Step by Step Laravel Product CRUD Tutorial',
'category_id' => $cat1
],
[
'title' => 'Laravel Image Upload Example',
'body' => 'Step by Step Laravel Image Upload Example',
'category_id' => $cat2
],
[
'title' => 'Laravel File Upload Example',
'body' => 'Step by Step Laravel File Upload Example',
'category_id' => $cat2
],
[
'title' => 'Laravel Cron Job Example',
'body' => 'Step by Step Laravel Cron Job Example',
'category_id' => $cat1
],
[
'title' => 'Laravel Send Email Example',
'body' => 'Step by Step Laravel Send Email Example',
'category_id' => $cat1
]
];
foreach ($posts as $key => $value) {
Post::create([
'title' => $value['title'],
'slug' => Str::slug($value['title']),
'body' => $value['body'],
'category_id' => $value['category_id'],
]);
}
}
}
Step 5: Add Route
First thing is we put one route in one for list posts with pagination with relations. So simply add both routes in your route file.
routes/web.php
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PostController;
Route::get('posts', [PostController::class, 'index']);
Step 6: Create Controller
Same as above for "route". Here, we will add one new method for "route". `index()` will return posts with pagination data, so let's add below:
app/Http/Controllers/PostController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Post;
use Illuminate\Http\RedirectResponse;
class PostController extends Controller
{
/**
* Write code on Method
*
* @return response()
*/
public function index(Request $request)
{
$posts = Post::with('category')->paginate(4);
return view('posts', compact('posts'));
}
}
Step 7: Create Blade File
In this step, you need to create a posts blade file and put below code with `links()` so it will generate pagination automatically. So let's put it.
resources/views/posts.blade.php
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>Laravel 11 Pagination with Relationship Example - ItSolutionStuff.com</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css">
</head>
<body>
<div class="container mt-5">
<div class="card mt-5">
<h3 class="card-header p-3">Laravel 11 Pagination with Relationship Example - ItSolutionStuff.com</h3>
<div class="card-body mt-3">
<div class="row">
@foreach($posts as $post)
<div class="col-md-3">
<div class="card mt-2" style="width: 18rem;">
<img src="https://picsum.photos/id/0/367/267" class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">{{ $post->title }}</h5>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
<button class="btn btn-primary">{{ $post->category->name ?? '' }}</button>
</div>
</div>
</div>
@endforeach
</div>
<div class="mt-3">
{{ $posts->links('pagination::bootstrap-5') }}
</div>
</div>
</div>
</div>
</body>
</html>
Run Laravel App:
All the required steps have been done, now you have to type the given below command and hit enter to run the Laravel app:
php artisan serve
Now, Go to your web browser, type the given URL and view the app output:
http://localhost:8000/posts
Output:
I hope it can help you....
Hardik Savani
I'm a full-stack developer, entrepreneur and owner of ItSolutionstuff.com. I live in India and I love to write tutorials and tips that can help to other artisan. I am a big fan of PHP, Laravel, Angular, Vue, Node, Javascript, JQuery, Codeigniter and Bootstrap from the early stage. I believe in Hardworking and Consistency.
We are Recommending you
- How to Send WhatsApp Messages With Laravel 11?
- Laravel 11 JSON Web Token(JWT) API Authentication Tutorial
- Laravel 11 Update User Profile Tutorial Example
- Laravel 11 PayPal Payment Gateway Integration Example
- Laravel 11 Send SMS using Twilio Tutorial Example
- Laravel 11 User Roles and Permissions Tutorial
- Laravel 11 Livewire Wizard Multi Step Form Tutorial
- Laravel 11 Restrict User Access from IP Address Example
- How to Save JSON Data in Database in Laravel 11?
- Laravel 11 Google Recaptcha V3 Validation Tutorial
- Laravel 11 Generate and Read Sitemap XML File Tutorial
- Laravel 11 Simple Pagination Example Tutorial
- Laravel 11 Chart using Highcharts JS Example