#database #development #eloquent #laravel #php
When paginating results, we would usually do
1$posts = Post::paginate(20);
This will make 2 queries. 1 to retrieve the paginated results and another to count the total no of rows in the table. Counting rows in a table is a slow operation and will negatively effect the query performance.
So why does laravel count the total no of rows?
To generate pagination links, Laravel counts the total no of rows. So, when the pagination links are generated, you know before-hand, how many pages will be there, and what is the past page number. So you can navigate to what ever the page you want easily.
On the other hand, doing simplePaginate
will not count the total no of rows and the query will be much faster than the
paginate approach. But you will lose the ability to know the last page number and able to jump to different pages.
If your database table has so many rows, it is better to avoid paginate
and do simplePaginate
instead.
1$posts = Post::paginate(20); // Generates pagination links for all the pages
2$posts = Post::simplePaginate(20); // Generates only next and previous pagination links
When to use paginate vs simple paginate?
Look at the below comparison table and determine if paginate or simple paginate is right for you
Scenario | paginate / simplePaginate |
---|---|
database table has only few rows and does not grow large | paginate / simplePaginate |
database table has so many rows and grows quickly | simplePaginate |
it is mandatory to provide the user option to jump to specific pages | paginate |
it is mandatory to show the user total no of results | paginate |
not actively using pagination links | simplePaginate |
UI/UX does not affect from switching numbered pagination links to next / previous pagination links | simplePaginate |
Using "load more" button or "infinite scrolling" for pagination | simplePaginate |
If this post was enjoyable or useful for you, please share it! If you have comments, questions, or feedback, you can email my personal email. To get new posts, subscribe use the RSS feed.