【问题标题】:Laravel Paginate displaying results unexpectedlyLaravel Paginate 意外显示结果
【发布时间】:2018-04-11 22:06:23
【问题描述】:

用于在主页上显示所有帖子的控制器功能(工作正常,我可以单击并查看按预期列出的所有帖子):

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 页上,即使它是该页面的唯一帖子。

【问题讨论】:

  • 您可以制作自己的分页模板和控制按钮的外观。
  • 我认为这是我获取 $post 数据的方式的问题,而不是 laravel 的分页问题,​​这只是一个意外的结果,我不知道如何解决。
  • 不清楚,有什么问题。 “那么第 16 个帖子出现在分页第 8 页上,即使它是该页面的唯一帖子” - 你为什么只有一个帖子?您有 16 个帖子!

标签: laravel laravel-pagination laravel-paginate


【解决方案1】:

我认为你理解分页器是错误的。您应该对过滤后的结果进行分页。不过滤分页的。

页面控制器:

$page = Page::findBySlug($slug);
$posts = Post::where('category_id', $page->id)->paginate(16);

【讨论】:

  • 这解决了我的问题。回答您之前的评论。我总共有 16 个帖子。但是这些帖子旨在基于与类别 ID 和页面 ID 匹配的特定页面。因此,在第 16 篇文章的情况下,它仅与一页相关。我猜你用你给我的答案想通了。无论哪种方式都有效,我非常感谢您。
  • 好的。我的信息是,您无法在不破坏分页的情况下过滤分页。你应该先过滤,然后分页。
猜你喜欢
  • 2017-09-26
  • 2019-12-05
  • 2014-09-07
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 2018-08-25
  • 2023-03-05
相关资源
最近更新 更多