Есть вещи, которые бесят в коде сильнее, чем неделя без сна. Например, когда для того, чтобы сделать две сраные кнопки «предыдущая» и «следующая», тебе начинают впаривать «архитектуру, готовую к масштабированию» и прочий корпоративный бред. Нет, друг, тут нет архитектуры. Тут три строки запроса. Всё. Но давай разберём честно, как это делается, чтобы потом не ковыряться в чужом индус-коде и не материться ночью на Eloquent.

Шаг 1. Получаем текущий пост

Очевидно, что сначала надо понять, где мы вообще находимся. У нас есть Post, у него есть ID, и Laravel прекрасно его достаёт. Да, даже если ты только проснулся и ещё не пил кофе:

use App\Models\Post;

Route::get('/post/{id}', function ($id) {
    $post = Post::find($id);
    return view('post.show', compact('post'));
});

Всё, у нас на руках конкретный пост. Без него двигаться дальше — это как искать водку в пустом холодильнике.

Шаг 2. Достаём предыдущий и следующий

Теперь начинается вся магия уровня «детский сад». Нам нужно два запроса: один смотрит назад, другой вперёд.

// Предыдущий $previousPost = Post::where('id', '<', $post->id)
    ->orderBy('id', 'desc')
    ->first();

// Следующий $nextPost = Post::where('id', '>', $post->id)
    ->orderBy('id', 'asc')
    ->first();

Если коротко: мы тупо сравниваем ID. И это норм, потому что ID в большинстве случаев растёт по порядку. Если у тебя хитрая сортировка «по дате» или «по луне в 9-м доме», то да, подменяй столбец.

Шаг 3. Рисуем кнопки в Blade

Тут уже без философии. Если пост есть — рисуем кнопку, если нет — идём лесом.

@if($previousPost)
    <a href="{{ route('post.show', $previousPost->id) }}">← Назад</a>
@endif

@if($nextPost)
    <a href="{{ route('post.show', $nextPost->id) }}">Вперёд →</a>
@endif

Хочешь кнопки с Tailwind, Bootstrap или в стиле «мне похрен, лишь бы кликалось» — пожалуйста. Логика от этого не меняется.

Шаг 4. Не забудь про маршруты

Если у тебя нет нормального маршрута для показа поста, Laravel тебе, конечно, ничего не подарит. Ну кроме боли. Так что добавь:

Route::resource('post', PostController::class);

Если ты используешь ресурсные маршруты, Laravel сам сообразит. Если нет — ну, тогда сам себе злобный Буратино, допиши вручную.

Итого

Мы получили:

  • Взял пост.
  • Нашёл соседей по ID.
  • Показал кнопки.

Всё. Хоть для блога, хоть для галереи котиков, хоть для админки, где надо листать отчёты по недоплаченным счетам.