Laravel Paginate неожиданно показывает результаты

Функция контроллера для отображения всех сообщений на домашней странице (работает нормально, я могу просмотреть все сообщения, как и ожидалось):

namespace App\Http\Controllers;

use App\Post;
use Illuminate\Http\Request;

class PostsController extends Controller
{

    public function showPosts()
    {
        $posts = Post::paginate(5);
        return view('index', ['posts' => $posts]);
    }

Функция контроллера для отображения всех сообщений на других страницах:

use App\Page;
use App\Post;
use Illuminate\Http\Request;

class PagesController extends Controller
{
    public function show($slug)
    {
        $posts = Post::paginate(16);
        $page = Page::findBySlug($slug);
        return view('page', ['page' => $page, 'posts' => $posts]);
    }

Для отображения на индекс у меня внутри index.blade:

    @foreach ($posts as $post)
    @include('partials.post', ['post' => $post])
    @endforeach

Для отображения на других страницах у меня внутри pages.blade:

    {{ $posts->links() }}

    @foreach ($posts as $post)

    <?php
    {
        if ($post->category_id == $page->id){?>
            @include('partials.post', ['post' => $post])
        <?php  }
    }?>
    @endforeach

Домашняя страница работает нормально. Другие страницы работают в определенной степени. Они показывают правильные сообщения на правильных страницах. Проблема с нумерацией страниц.

Используя 16-й пост в качестве примера, если я скажу $posts = Post::paginate(16); тогда пост отображается на странице, и там нет кнопок нумерации страниц, так как общее количество постов равно 16. Если я скажу $posts = Post::paginate(2); затем 16-й пост появляется на странице 8, даже если это единственный пост для этой страницы.

1 ответ

Решение

Я думаю, вы неправильно понимаете paginator. Вы должны разбить на отфильтрованные результаты. Не фильтруйте постраничные.

PagesController:

$page = Page::findBySlug($slug);
$posts = Post::where('category_id', $page->id)->paginate(16);
Другие вопросы по тегам