如何使用 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;
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;
你好
我目前致力于创建一个网站,将论坛 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;
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;