📖 Scenario: You are building a simple blog website using Laravel. You want to show a list of blog posts on a page, but only a few posts at a time so the page does not get too long. This is called pagination.Pagination helps users see content in smaller chunks and navigate between pages easily.
🎯 Goal: Create a Laravel controller method that fetches blog posts from the database and paginates them, then display the paginated posts in a Blade view with navigation links.
📋 What You'll Learn
Create a Laravel Eloquent query to get all posts
Set a pagination limit of 5 posts per page
Pass the paginated posts to a Blade view
Display the posts and pagination links in the Blade view
💡 Why This Matters
🌍 Real World
Pagination is used in almost every website that shows lists of items, like blogs, products, or users, to improve user experience and performance.
💼 Career
Knowing how to implement pagination in Laravel is a common task for web developers working with databases and user interfaces.
Progress0 / 4 steps
1
Set up the Posts data retrieval
In the PostController, create a method called index that retrieves all posts using Post::query() and stores it in a variable called postsQuery.
Laravel
Hint
Use Post::query() to start building a query for posts.
2
Add pagination configuration
Inside the index method, create a variable called perPage and set it to 5 to define how many posts to show per page.
Laravel
Hint
Set $perPage to 5 to limit posts per page.
3
Apply pagination to the posts query
Use the paginate method on $postsQuery with $perPage as argument, and store the result in a variable called posts.
Laravel
Hint
Call paginate($perPage) on $postsQuery and save to $posts.
4
Return view with paginated posts and display links
Return the Blade view posts.index from the index method, passing the posts variable. In the Blade view, loop over $posts to show each post's title inside an <li>. Below the list, add the pagination links using {{ $posts->links() }}.
Laravel
Hint
Use return view('posts.index', ['posts' => $posts]) in controller. In Blade, use @foreach ($posts as $post) to loop and {{ $posts->links() }} for pagination links.
Practice
(1/5)
1. What is the main purpose of using paginate() in Laravel?
easy
A. To join multiple tables in a query
B. To sort data alphabetically
C. To delete records from the database
D. To split large data sets into smaller pages for easier viewing
Solution
Step 1: Understand the function of paginate()
The paginate() method divides a large set of data into smaller chunks or pages.
Step 2: Recognize the benefit of pagination
This makes data easier to view and improves website speed by loading only a subset of data at a time.
Final Answer:
To split large data sets into smaller pages for easier viewing -> Option D
Quick Check:
Pagination = split data into pages [OK]
Hint: Remember paginate() breaks data into pages [OK]
Common Mistakes:
Confusing paginate() with sorting methods
Thinking paginate() deletes data
Assuming paginate() merges tables
2. Which of the following is the correct way to paginate 10 items per page in a Laravel Eloquent query?
easy
A. $users = User::get(10);
B. $users = User::paginate(10);
C. $users = User::limit(10)->paginate();
D. $users = User::paginate()->take(10);
Solution
Step 1: Identify correct paginate() usage
The paginate() method accepts the number of items per page as an argument, like paginate(10).
Step 2: Check other options for syntax errors
get(10) does not paginate, limit(10)->paginate() is incorrect usage, and paginate()->take(10) is invalid chaining.
Final Answer:
$users = User::paginate(10); -> Option B
Quick Check:
paginate(10) sets items per page [OK]
Hint: Use paginate(number) to set items per page [OK]
A. Missing parentheses after paginate; fix with paginate()
B. paginate is not a method; use get() instead
C. paginate requires a parameter; add paginate(10)
D. User model does not support pagination
Solution
Step 1: Identify syntax error
paginate is a method and must be called with parentheses ().
Step 2: Correct the code
Change User::paginate to User::paginate() to fix the error.
Final Answer:
Missing parentheses after paginate; fix with paginate() -> Option A
Quick Check:
Method calls need () [OK]
Hint: Always add () when calling methods [OK]
Common Mistakes:
Forgetting parentheses on method calls
Using get() instead of paginate() for pagination
Assuming paginate needs a parameter always
5. You want to customize the pagination to show 15 items per page and use a Bootstrap 5 style in your Blade view. Which code snippet correctly achieves this?
hard
A. $posts = Post::paginate(15, 'bootstrap-5');
{{ $posts->links() }}
B. $posts = Post::paginate(15);
{{ $posts->links('bootstrap') }}
C. $posts = Post::paginate(15);
{{ $posts->links('pagination::bootstrap-5') }}
D. $posts = Post::paginate(15);
{{ $posts->links() }}
Solution
Step 1: Set items per page correctly
Use paginate(15) to show 15 items per page.
Step 2: Use correct Bootstrap 5 pagination view
Pass 'pagination::bootstrap-5' to links() to apply Bootstrap 5 styles.
Step 3: Verify other options
The option with paginate(15, 'bootstrap-5') incorrectly passes the style to paginate(), links('bootstrap') uses wrong view name, and plain links() uses default style.
Final Answer:
$posts = Post::paginate(15);
{{ $posts->links('pagination::bootstrap-5') }} -> Option C