Reputation: 2455
Been working on this for far too long with no results. I have tried.
`\Illuminate\Pagination\Paginator::setCurrentPage($current_page);`
returns
Call to protected method Illuminate\Pagination\Paginator::setCurrentPage()
\Paginator::setCurrentPage($current_page);
returns Call to protected method Illuminate\Pagination\Paginator::setCurrentPage()
\DB::getPaginator()->setCurrentPage($current_page);
returns call_user_func_array() expects parameter 1 to be a valid callback, class 'Illuminate\Database\MySqlConnection' does not have a method 'getPaginator'
$tmp = new Post( ); $tmp->getConnection()->setCurrentPage($current_page);
returns call_user_func_array() expects parameter 1 to be a valid callback, class 'Illuminate\Database\MySqlConnection' does not have a method 'getPaginator'
How can I specify the page? I need to specify it manually.
I had hoped it to be as easy as $model->find( )->paginate($per_page, $page)
Upvotes: 32
Views: 47629
Reputation: 11
After 7 years) in Laravel 8 I wanted to show the last page if the page from the parameter is bigger than the total pages the after search result. Below is my solution.
$paginator = $properties->paginate($items_per_page);
if ($paginator->currentPage() > 1 && $paginator->isEmpty()) {
$paginator = $properties->paginate($items_per_page, ['*'], 'page', $paginator->lastPage());
}
Upvotes: 1
Reputation: 581
for those people who using api and they want to specify the current page in api, they can use extra parameter like this:
getProducts?page=3
Upvotes: -1
Reputation: 1152
The Builder Class has:
public function paginate($perPage = null, $columns = ['*'], $pageName = 'page', $page = null)
You can call
Model::find(...)->paginate($per_page, ['*'], 'page', $page);
Upvotes: 85
Reputation: 988
Suppose you have $users
to paginate in your UserController
, you might do:
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'));
}
I believe this applies to Laravel 5.0 and above. Have to check on that.
Upvotes: 52