web-dev-qa-db-ja.com

クエリ文字列をlaravelページネーションリンクに自動的に追加するには?

LaravelとAjax呼び出しを使用して、チェックボックスをクリックして検索フィルターに取り組んでいます。したがって、チェックボックスをクリックすると結果が得られます。クエリは次のとおりです。

    $editors = User::with(['editor.credentials','editor.specialties','editor.ratings']);
        $temp=$editors->whereHas('editor', function($q) use ($a_data){
            $q->whereHas('specialties',function($sq) use($a_data){
            $sq->whereIn('specialty',$a_data);
            });
        })->paginate(2);

これにより、必要なすべてのデータが得られます。しかし、ページネーションのリンクをどのように取得する必要がありますか?

    $temp->setBaseUrl('editors');
    $links = $temp->links()->render();

現在これを行っており、ajax呼び出しへの応答として送信している$ linksを使用して、$ linksデータでページネーションを設定します。ここで、page = 2?query = "something"のようなクエリを次のページに追加する必要があります。残りのクエリ結果リンクを次のページのリンクに追加する方法を知りません。すなわち、私は知らない; query = "something"部分に何が来るべきかわからない。誰かが私を導くことができます。ありがとう

23
user2067888

グローバルソリューションである@Ardaの回答を確認してください。以下に、手動で行う方法を示します。

Paginatorでappendsを使用します。

$querystringArray = Input::only(['search','filter','order']); // sensible examples

// or:
$querystringArray = ['queryVar' => 'something', 'anotherVar' => 'something_else'];

$temp->appends($querystringArray);
17
Jarek Tkaczyk
{{ $users->appends($_GET)->links() }}

すべてのクエリ文字列パラメーターをページネーションリンクに追加します

83
Daud khan

これをアプリの任意の場所(たとえば、routes.php、filters.php、または自動ロードされるもの)に追加します。既に記述されているページネーションコードを編集する必要はありません。これは、ビューコンポーザーを使用して問題なく機能し、クエリ文字列パラメーターを知る必要はありません。

////////PAGINATION QUERY STRING APPEND
View::composer(Paginator::getViewName(), function($view) {
    $queryString = array_except(Input::query(), Paginator::getPageName());
    $view->paginator->appends($queryString);
});
//////////////////
14
Arda

Laravel現時点(5.2)の最新バージョンの場合、Requestファサードを使用してクエリ文字列を取得し、それをページネーターのappends()メソッドに渡すことができます。

$input = Request::input();
$myModelsPaginator = App\Models\MyModel::paginate();
$myModelsPaginator->appends($input);
13
georaldc

実際のページ、フォームトークン、および渡したくないものを除くすべての入力を追加します。

$paginatedCollection->appends(request()->except(['page','_token']));
10
Luca C.

以前の回答から着想を得て、フロントエンドとAPIの両方のサポートにサービスコンテナーを使用することになりました。

AppServiceProvider@boot()メソッドで:

$this->app->resolving(LengthAwarePaginator::class, function ($paginator) {
    return $paginator->appends(array_except(Input::query(), $paginator->getPageName()));
});

ビューでページネーションを表示します...

{{ $results->appends(Request::except('page'))->links() }}

appendsは、「ページ」以外のクエリ文字列値を保持します。 POSTリクエストで動作するかどうかわからない