Laravel 意外分页显示结果
Laravel Paginate displaying results unexpectedly
用于在主页上显示所有 post 的控制器功能(工作正常,我可以点击并按预期查看所有 post 列表):
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]);
}
用于在其他页面上显示所有 post 的控制器函数:
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
主页工作正常。其他页面在一定程度上起作用。他们在正确的页面上显示正确的 post。问题在于分页。
以第16个post为例,如果我说$posts = Post::paginate(16);
,那么页面上显示post,没有分页按钮显示为[=的总数31=]s 是 16。如果我说 $posts = Post::paginate(2);
那么第 16 个 post 会出现在第 8 页上,即使它是该页面唯一的 post。
我认为您对分页器的理解有误。您应该对过滤结果进行分页。不过滤分页的。
页面控制器:
$page = Page::findBySlug($slug);
$posts = Post::where('category_id', $page->id)->paginate(16);
用于在主页上显示所有 post 的控制器功能(工作正常,我可以点击并按预期查看所有 post 列表):
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]);
}
用于在其他页面上显示所有 post 的控制器函数:
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
主页工作正常。其他页面在一定程度上起作用。他们在正确的页面上显示正确的 post。问题在于分页。
以第16个post为例,如果我说$posts = Post::paginate(16);
,那么页面上显示post,没有分页按钮显示为[=的总数31=]s 是 16。如果我说 $posts = Post::paginate(2);
那么第 16 个 post 会出现在第 8 页上,即使它是该页面唯一的 post。
我认为您对分页器的理解有误。您应该对过滤结果进行分页。不过滤分页的。
页面控制器:
$page = Page::findBySlug($slug);
$posts = Post::where('category_id', $page->id)->paginate(16);