他のGETパラメーターを含まないLaravelページネーションリンク


102

EloquentをLaravel 4のPaginationクラスと一緒に使用しています。

問題: URLにいくつかのGETパラメーターがある場合(例http://site.com/users?gender=female&body=hot:)、生成されるページネーションリンクにはpageパラメーターのみが含まれ、他には何も含まれません。

ブレードテンプレート

{{ $users->link() }}

これには->append()関数がありますが、GETパラメーターがいくつあるかわからない場合、ブレードテンプレートをめちゃくちゃにするコードappend()全体を使わずに、ページングされたリンクに他のGETパラメーターを含めるにはどうすればよいifでしょうか。

回答:


121

編集:この作業を行うには、コナーのコメントとメーディの回答が必要です。両者の明確化に感謝します。

->appends()配列をパラメーターとして受け入れることができInput::except('page')、を渡すことができます。

例:

return view('manage/users', [
    'users' => $users->appends(Input::except('page'))
]);

37
このように来ている他のGoogle社員に注意してください-現在は複数形appendsはありません append。正しい連鎖は次のようなものになります$query->appends($foo)->links();
Connor Peet 2013年

6
私は$query->appends(Input::except('page'))->links();うまくいったことがわかりました。そうしないと、ページをクリックしたときにページ変数が更新されませんでした。Laravel 4.1.24。
bitlather 2014年

...次にスクロールダウンして、Mehdiのソリューションを確認しました。
bitlather 2014年

2
LARAVEL 5: {!! $myItems->appends(Input::except('page'))->render() !!}
ecairol 2015年

2
laravel 5.2では、入力の代わりにリクエストを使用する必要があります
Christophvh

104

Laravel 5でこのコードを使用する必要があると思います。また、これはパラメーターだけでなくpage、他のパラメーターでも機能します。

$users->appends(request()->input())->links();

個人的には、なるべく使わFacadesないようにしています。グローバルヘルパー関数の使用は、コードが少なく、非常にエレガントです。

更新:

InputFacadeはLaravel v6 +で廃止されているため、使用しないでください。


2
これはlaravel 5.6で機能し、受け入れられた回答ソリューションを使用するとエラーが発生しました。
Muhmmad Aziz、2018

1
私はこれも5.3プロジェクトにうまく実装しました。私もこの単純な方法を好む
kjones '14

3
また、except('page')このソリューションでは使用する必要がないことにも気付きました。
BakerStreetSystems 2018

1
非常に役立ちます。ありがとう
Viraj Amarasinghe

40

注意してInput::all()それは以前含まれています、?page=あなたが開いて、各ページに何度も何度も値を!
たとえば、あなたが?page=1いるときに次のページを開くと、それが開きます。?page=1&page=2
したがって、最後に表示される値ページは、表示されるページになります。見たいページではない

解決策:使用 Input::except(array('page'))


39

あなたは使うことができます

->appends(request()->query())

コントローラーの例:

$users = User::search()->order()->with('type:id,name')
    ->paginate(30)
    ->appends(request()->query());

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

ビューの例:

{{ $users->appends(request()->query())->links() }}

3
これはMohamed Said(Laravelの従業員)が提案した方法です。github.com
Roy

1
@royが言ったこと+より良い例のため、これが最良の答えだと思います。また、コントローラーの例+ビューの例もあります。
18:44のMaky

2
私のために働いた。+1
Manoj Kumar

1
これは最良の解決策であり、これも私にとってうまくいった
Jithin '22

28

ではないappend()が、appends() だから、右の答えは次のとおりです。

{!! $records->appends(Input::except('page'))->links() !!}

11

ララヴェル5

ビューには次のようなものが含まれている必要があります。

{!! $myItems->appends(Input::except('page'))->render() !!}


5

この構成を使用して、ページ以外のすべての入力パラメーターを保持します

{!! $myItems->appends(Request::capture()->except('page'))->render() !!}

どうして?

1)そのようにリクエストに追加されたすべてを取り除きます

  $request->request->add(['variable' => 123]);

2)関数の入力パラメーターとして$ requestは必要ありません。

3)「ページ」を除外しています

PS)そしてそれはLaravel 5.1のために働きます



4

laravel 5以上のブレードの1人の場合:

{{ $table->appends(['id' => $something ])->links() }}

渡されたアイテムを取得できます

$passed_item=$request->id;

でそれをテストする

dd($passed_item);

$ somethingの値を取得する必要があります


1

Laravel 7.xはpaginatorに新しいメソッドを追加しました:

->withQueryString()

したがって、次のように使用できます。

{{ $users->withQueryString()->links() }}

7.xより下のlaravelの場合は、次を使用します。

{{ $users->appends(request()->query())->links() }}

0

ページ付けのページ番号も渡します。このようなもの

$currentPg = Input::get('page') ? Input::get('page') : '1';
    $boards = Cache::remember('boards'.$currentPg, 60, function(){ return WhatEverModel::paginate(15); });

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.