Laravel Eloquent 分页控制页码与路由

Posted

技术标签:

【中文标题】Laravel Eloquent 分页控制页码与路由【英文标题】:Laravel Eloquent pagination control page number with route 【发布时间】:2017-10-20 00:29:02 【问题描述】:

Articles::paginate(10) 此代码将返回第 10 篇文章,如果我想返回带有路由的下 10 篇文章怎么办?例如 url mypage.com/articles/2 将返回数据库中的第 2 10 篇文章。 到目前为止,这是我所拥有的:路线:

Route::get('articles/page_number', 'Controller@getArticles')

控制器:

public function getArticles($page_num)

    $perPage = 10;
    Articles::getPaginator()->setCurrentPage($page_num);
    $articles = Articles::paginate($perPage);
    return $articles;

我可以有类似Articles::pageNumber($page_number)->paginate($perPage); 的东西吗?

【问题讨论】:

【参考方案1】:

Laravel 分页器自动检查查询字符串中page 的值,并使用它对结果进行分页。结果还会自动生成下一个和上一个链接,以帮助您直接添加它们。您无需进行任何更改即可使其正常工作。

在您的情况下,您可以在视图中使用$articles->links() 来生成分页导航按钮。但是如果你想手动设置页面那么你可以这样做。

$articles = Articles::paginate(5, ['*'], 'page', $pageNumber);

默认的分页方法采用以下参数。

public function paginate($perPage = null, $columns = ['*'], $pageName = 'page', $page = null);

默认约定是

mypage.com/articles?page=2
mypage.com/articles?page=3

另外如果你使用$articles->links()生成导航按钮,还可以自定义css。

查看https://laravel.com/docs/5.4/pagination了解更多信息

【讨论】:

我收到错误Method setCurrentPage does not exist. @Newbie 我的错,我已经很久没有使用分页了。我已经更新了我的答案并测试了代码以确保。【参考方案2】:

$results= DB::table('subscribers')->select('id', 'name', 'email')->paginate(20);

$results->count();

$results->currentPage();

$results->firstItem();

$results->hasMorePages();

$results->lastItem();

$results->lastPage(); (使用 simplePaginate 时不可用)

$results->nextPageUrl();

$results->perPage();

$results->previousPageUrl();

$results->total(); (使用 simplePaginate 时不可用)

$results->url($page);

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于Laravel Eloquent 分页控制页码与路由的主要内容,如果未能解决你的问题,请参考以下文章

Eloquent Laravel 按相关模型排序分页查询

Laravel Eloquent - hasrsine 公式和分页

Laravel Eloquent 按孩子的长度排序,然后分页

如何通过分页获取 Laravel Eloquent 中的特定列?

在 Eloquent 资源中使用分页会在 Laravel 中引发 Undefined Property $id 错误

laravel分页功能