Laravel 5.1指定当前页面进行分页

31

已经做了太久,但是没有结果。我已经尝试过了。

`\Illuminate\Pagination\Paginator::setCurrentPage($current_page);`

返回 调用受保护方法 Illuminate\Pagination\Paginator::setCurrentPage()

\Paginator::setCurrentPage($current_page);

返回 调用受保护方法 Illuminate\Pagination\Paginator::setCurrentPage()

\DB::getPaginator()->setCurrentPage($current_page);

返回 call_user_func_array() 函数期望参数1为一个有效的回调函数,类 'Illuminate\Database\MySqlConnection' 没有 'getPaginator' 方法

$tmp = new Post(); $tmp->getConnection()->setCurrentPage($current_page);

返回 call_user_func_array() 函数期望参数 1 为一个有效的回调函数,类 'Illuminate\Database\MySqlConnection' 没有 'getPaginator' 方法

如何指定页面?我需要手动指定。

我希望它像这样简单:$model->find()->paginate($per_page, $page)


1
我也遇到了这个问题,如果我解决了,我会让你知道。 - Adam
4个回答

84

Builder类具有以下特点:

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

您可以调用

Model::find(...)->paginate($per_page, ['*'], 'page', $page);

1
是的,这种方法更好。谢谢@PATROMO。 - user1880576
太棒了。谢谢@Patromo。 - Christian Szardenings
2
运行得非常好。paginate() 函数的文档链接:https://laravel.com/api/5.5/Illuminate/Database/Eloquent/Builder.html#method_paginate - Lemmings19
很棒的解决方案。 - Cong LB

52

假设您有一个$users需要在您的UserController中进行分页处理,您可以这样做:

假设你有$users需要在你的UserController中进行分页处理,你可能会这样做:

public function index()
{
    $currentPage = 3; // You can set this to any page you want to paginate to

    // Make sure that you call the static method currentPageResolver()
    // before querying users
    Paginator::currentPageResolver(function () use ($currentPage) {
        return $currentPage;
    });

    $users = \App\User::paginate(5);

    return view('user.index', compact('users'));
}

我认为这适用于Laravel 5.0及以上版本。需要进行确认。


5
否则它将在当前命名空间中搜索该类。使用\Illuminate\Pagination\Paginator::currentPageResolver运行后,它可以正常工作。使用\Paginator会告诉我找不到该类。这样做就可以了! - Shane
5
Shane,你可以在控制器的顶部import这个类: use Illuminate\Pagination\Paginator; - amith.gotamey
完美。谢谢。 - Iftakharul Alam
你的代码应该添加一个if条件来检查用户是否要进入其他页面,否则它将一直停留在同一页。 - Kelvin Low
1
虽然这可能有效,但我已经投了反对票,因为这样做远远超出了简单地传递方法签名中已经存在的参数。 - Wesley Smith
有没有一种方法能够确定如何创建分页链接?肯定有某些东西可以获取当前请求并将页面参数追加到其中。但我想通过路由名称更改此过程。 - Čamo

1

在Laravel 8中经过7年的开发,如果参数页码大于搜索结果总页数,我希望显示最后一页。以下是我的解决方案。

$paginator = $properties->paginate($items_per_page);

if ($paginator->currentPage() > 1 && $paginator->isEmpty()) {
    $paginator = $properties->paginate($items_per_page, ['*'], 'page', $paginator->lastPage());
}

-1

对于那些使用 API 并想在 API 中指定当前页面的人,他们可以使用类似于以下的额外参数:

getProducts?page=3


这真的取决于你的路由结构以及你如何使用框架。分页器默认使用“first_page_url”:“/?page=1”,但如果你没有使用这种结构,它就不起作用。 - Rodrigo Almeida

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接