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 разбивки, даже когда это единственный пост на этой странице.


person Dan    schedule 11.04.2018    source источник
comment
Вы можете сделать свой собственный шаблон пагинации и внешний вид кнопок управления.   -  person shukshin.ivan    schedule 12.04.2018
comment
Я думаю, что это проблема с тем, как я получаю данные $post, а не проблема с разбиением на страницы laravel, это был просто неожиданный результат, который я не знаю, как решить.   -  person Dan    schedule 12.04.2018
comment
Непонятно, что не так. затем 16-й пост появляется на странице 8 страницы, даже если это единственный пост на этой странице - почему у вас есть единственный пост? У тебя 16 постов!   -  person shukshin.ivan    schedule 12.04.2018


Ответы (1)


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

Контроллер страниц:

$page = Page::findBySlug($slug);
$posts = Post::where('category_id', $page->id)->paginate(16);
person shukshin.ivan    schedule 11.04.2018
comment
Это решило мою проблему. Чтобы ответить на ваш предыдущий комментарий. Всего у меня 16 постов. Но сообщения, предназначенные для определенных страниц, основаны на совпадениях с идентификатором категории и идентификатором страницы. Так что в случае поста 16 он относился только к одной странице. Я думаю, вы поняли это с ответом, который вы мне дали. В любом случае это работает, и я очень благодарен, спасибо. - person Dan; 12.04.2018
comment
ХОРОШО. Мое сообщение заключается в том, что вы не можете фильтровать нумерацию страниц, не нарушая ее. Вы должны сначала отфильтровать, а затем разбить на страницы. - person shukshin.ivan; 12.04.2018