Posts Learn Components Snippets Categories Tags Tools About
/

Getting previous and next record in Laravel

Learn how to get the previous and next record in a Laravel application to navigate around easily

3 years ago

5 mins read

1266 views

To be able to navigate around through the previous and next resources is a very handy feature to have. This will enable easy navigation between the record on both sides (left and right). The implementation is quite straight forward but certain logic has to be clearly defined to get the right result in the model.

Example Scenario

  • PostSrc previous and next post
  • Laracast previous and next episode series
There are several ways to implement this functionality and the simplest way is to use the Model Id. Since by right an Id auto increment, we can assume that the newest post will always have a higher number than the oldest post.

Previous and Next Implementation


To get the previous and next posts we'll be using the code below. Do note that it's within the controller that you have defined in, otherwise any other places suitable in your application.
function show(int $id)
{
    // get the current post
    $post = Post::find($id);

    // get previous post id
    $previous = Post::where('id', '<', $post->id)->max('id');

    // get next post id
    $next = Post::where('id', '>', $post->id)->min('id');

    return view('posts.show', compact('post', 'previous', 'next'));
}
In the example above we are getting the default post by querying using the "id". To get the previous and next post we make use of the where clause by getting the lowest and highest post model "id" value. Once we get the models, we are comparing them with the other models we are getting the "max" for the previous post and "min" for the next post and this essentially filters the model to get only one that matches the criteria.

Previous and Next Video / Episode


In other case scenarios where you are not making use of the model "id", you need to define a column such as "episode_number" where it will store the numeric value.
function show(int $id)
{
    // get the current episode
    $episode = Episode::find($id);

    // get previous episode number
    $previous = Episode::where('episode_number', '<', $post->episode_number)->max('episode_number');

    // get next episode number
    $next = Episode::where('episode_number', '>', $post->episode_number)->min('episode_number');

    return view('episodes.show', compact('episode', 'previous', 'next'));
}

Alternative Tags

If you like our tutorial, do make sure to support us by being our Patreon or buy us some coffee ☕️

Load comments for Getting previous and next record in Laravel

)