如何使用 laravel 分页和跳过(1)

How to use laravel Paginate and skip(1)

你好

我目前致力于创建一个网站,将论坛 post 拉到一个单独的页面上,我将它们用作博客条目。为了让它按我想要的方式工作,我首先 ->get() 最新的 post 用于顶部,主要,博客条目,然后我用这样的砌体风格 foreach 下面的其他人:www.hockeyforat.se/laravel

这意味着我确实有这个设置:

$post = Post::whereNewTopic(true)
            ->whereHas('Topic', function($q){$q->whereForumId(13);})
            ->orderBy('pid', 'DESC')
            ->first();
    $vars['p'] = $post;

这显然是为了拖出最新的 post 并将其放在顶部,这样效果很好,但是接下来的另一部分我必须跳过第一个 post(因为它已经在上面代码的页面上了)。我用这个来做那个:

$posts = Post::whereNewTopic(true)
        ->whereHas('Topic', function($q){$q->whereForumId(13);})
        ->orderBy('pid', 'DESC')
        ->skip(1)
        ->take(100000)
        ->get();
    $vars['posts'] = $posts;

这也非常有效。但是当我想对它进行分页时,我遇到了一些问题。出于某种原因,我的 ->paginate(6) 忽略了 ->skip(1).任何人都知道如何解决这个问题?示例再次出现:www.hockeyforat.se/laravel 我还将在下面添加一张图片。如您所见,如果不跳过第一个,我将连续得到相同的 post,因为第一个在上面用 $post 抽出。

$posts = Post::whereNewTopic(true)
            ->whereHas('Topic', function($q){$q->whereForumId(13);})
            ->orderBy('pid', 'DESC')
            **->skip(1)**
            ->take(100000)
            **->paginate(6);**
    $vars['posts'] = $posts;

http://i.stack.imgur.com/UIfi9.jpg

2 种方式:

  • 首先:只使用->paginate(6)而不跳过并渲染 页码 echo $users->render();

  • 其次:不要使用->paginate(6),使用->take($take)->skip($page * $take) 在你的情况下意味着:->take(6)->skip($page * 6)$page 必须是您请求的一部分并且 从 0(零)开始。

无法让跳过部分按预期与分页一起工作,但通过说“不要对 $post.[= 中的任何 post id (pid) 进行分页来解决。 11=]

$post = Post::whereNewTopic(true)
        ->whereHas('Topic', function($q){$q->whereForumId(13);})
        ->orderBy('pid', 'DESC')
        ->first();
$vars['p'] = $post;


$posts = Post::whereNewTopic(true)
            ->whereHas('Topic', function($q){$q->whereForumId(13);})
            ->where('pid', '<>', $post->pid)
            ->orderBy('pid', 'DESC')
            ->paginate(6);
$vars['posts'] = $posts;