I am using Eloquent together with Laravel 4's Pagination class.
Problem: When there are some GET parameters in the URL, eg: http://site.com/users?gender=female&body=hot
, the pagination links produced only contain the page
parameter and nothing else.
Blade Template
{{ $users->link() }}
There's a ->append()
function for this, but when we don't know how many of the GET parameters are there, how can we use append()
to include the other GET parameters in the paginated links without a whole chunk of if
code messing up our blade template?
This question is related to
pagination
laravel
laravel-4
eloquent
blade
LARAVEL 5
The view must contain something like:
{!! $myItems->appends(Input::except('page'))->render() !!}
Not append()
but appends()
So, right answer is:
{!! $records->appends(Input::except('page'))->links() !!}
Pass the page number for pagination as well. Some thing like this
$currentPg = Input::get('page') ? Input::get('page') : '1';_x000D_
$boards = Cache::remember('boards'.$currentPg, 60, function(){ return WhatEverModel::paginate(15); });
_x000D_
I think you should use this code in Laravel version 5+.
Also this will work not only with parameter page
but also with any other parameter(s):
$users->appends(request()->input())->links();
Personally, I try to avoid using Facades
as much as I can. Using global helper functions is less code and much elegant.
UPDATE:
Do not use Input
Facade as it is deprecated in Laravel v6+
In Laravel 7.x you can use it like this:
{{ $results->withQueryString()->links() }}
Include This In Your View Page
$users->appends(Input::except('page'))
Use this construction, to keep all input params but page
{!! $myItems->appends(Request::capture()->except('page'))->render() !!}
Why?
1) you strip down everything that added to request like that
$request->request->add(['variable' => 123]);
2) you don't need $request as input parameter for the function
3) you are excluding "page"
PS) and it works for Laravel 5.1
Be aware of the Input::all()
, it will Include the previous ?page=
values again and again in each page you open !
for example if you are in ?page=1
and you open the next page, it will open ?page=1&page=2
So the last value page takes will be the page you see ! not the page you want to see
Solution : use Input::except(array('page'))
Laravel 7.x and above has added new method to paginator:
->withQueryString()
So you can use it like:
{{ $users->withQueryString()->links() }}
For laravel below 7.x use:
{{ $users->appends(request()->query())->links() }}
You could use
->appends(request()->query())
Example in the Controller:
$users = User::search()->order()->with('type:id,name')
->paginate(30)
->appends(request()->query());
return view('users.index', compact('users'));
Example in the View:
{{ $users->appends(request()->query())->links() }}
for who one in laravel 5 or greater in blade:
{{ $table->appends(['id' => $something ])->links() }}
you can get the passed item with
$passed_item=$request->id;
test it with
dd($passed_item);
you must get $something value
Source: Stackoverflow.com