2017-03-21 18 views
1

最初のページは正しく並べ替えられます。しかし、2番目のページ(およびさらに)は、検索のフィールドがまったく塗られていないかのように戻るでしょう。検索後のページ区切りは最初のページでのみ有効

$users = User::with('exam', 'institution'); 


    if ($request->has('user_id')) { 
     $users->whereId($request->user_id); 
    } 

    if ($request->has('email')) { 
     $users->whereEmail($request->email); 
    } 

    if ($request->has('first_name')) { 
     $users->where('first_name', 'LIKE', "%{$request->first_name}%"); 
    } 

    if ($request->has('family_name')) { 
     $users->where('family_name', 'LIKE', "%{$request->family_name}%"); 
    } 

    if ($request->has('institution_id')) { 
     $users->whereInstitutionId($request->institution_id); 
    } 

    if ($request->has('exam_id')) { 
     $users->whereExamId($request->exam_id); 
    } 

    $users = $users->latest()->paginate(48); 
    $usersTotal = $users->total(); 

    $exams = ['' => 'Exam...'] + Exam::orderBy('title') 
     ->pluck('title', 'id') 
     ->all(); 

    $institutions = ['' => 'University...'] + Institution::orderBy('name') 
     ->pluck('name', 'id') 
     ->all(); 

    return view('admin.users.index', compact('users', 'usersTotal', 'exams', 'institutions')); 
:フォームは、それが次にユーザーのコントローラをGETルート

Route::get('members/search', '[email protected]')->name('admin.users.search'); 

をヒットします提出された後

{{ Form::open(['route' => 'admin.users.search', 'method' => 'get', 'class' => 'navbar-form navbar-left form-inline', 'role' => 'search']) }} 

<div class="form-group"> 
    {{ Form::text('user_id', request('user_id'), ['class' => 'form-control', 'size' => '8', 'placeholder' => 'ID']) }} 
</div> 


<div class="form-group"> 
    {{ Form::email('email', request('email'), ['class' => 'form-control', 'size' => '20', 'placeholder' => 'Email']) }} 
</div> 

<div class="form-group"> 
    {{ Form::text('first_name', request('first_name'), ['class' => 'form-control', 'size' => '20', 'placeholder' => 'First Name']) }} 
</div> 

<div class="form-group"> 
    {{ Form::text('family_name', request('family_name'), ['class' => 'form-control', 'size' => '20', 'placeholder' => 'Family Name']) }} 
</div> 

<div class="form-group"> 
    <div class="selectize-lg"> 
     {{ Form::select('institution_id', $institutions, request('institution_id'), ['class' => 'form-control', 'size' => '200', 'data-selectize']) }} 
    </div> 
</div> 

<div class="form-group"> 
    <div class="selectize-lg"> 
     {{ Form::select('exam_id', $exams, request('exam_id'), ['class' => 'form-control', 'data-selectize']) }} 
    </div> 
</div> 

<div class="form-group "> 
    {{ Form::submit('Search', ['class' => 'btn btn-default']) }} 
</div> 

<a href="{{ route('admin.users.index') }}" class="btn btn-warning">Clear</a> 

{{ Form::close() }} 

私は以下のフォームで検索フィールドを収集しています

次に、ビューで私はこのようなページネーションリンクを追加しています:

{{ $users->appends(array_filter(request()->except('page')))->render() }} 

ただし、検索結果は最初のページでのみ機能します。例えば、最初のページ上のルートは次のようになります。

search?user_id=&email=hello%40world&first_name=John&family_name=Smith&institution_id=1&exam_id=1 

しかし、2ページ目には、次のようになります。

search?page=2 

私が原因となっている、あまりにも確認してくださいこれはかなり不可解ではなく見つけています2番目のページで検索が失敗します。あなたは メソッドを追加を使用してページネーションリンクのクエリ文字列に追加してページネーションリンク

に追加する

+0

ページングボタンを含むフォームにすべての検索パラメータ(非表示入力として)を含めていますか? – Amarnasan

答えて

0

From the docs:

。あなたはページネータのURLへの「ハッシュフラグメント」を追加 したい場合は、 フラグメントを使用することができ

{{ $users->appends(['sort' => 'votes'])->links() }}:たとえば、各ページネーション リンクにソート=票を追加​​するには、アペンドへの次の呼び出しを行う必要があります方法。

{{ $users->fragment('foo')->links() }}

あなたはこれで正しい軌道に乗って、ほぼ以下のとおりです:

{{ $users->appends(array_filter(request()->except('page')))->render() }} 
例えば、フラグメントメソッドに次の呼び出しを行い、各 ページネーションリンクの最後に#fooを追加します

ワットこのコードの平和は、ページを切り替えるときにページ要求を引き継ぐことです。これは、あなたのために必要なので、必要です。したがって、保持したい要求データを指定する必要があります。したがって、たとえば:

デフォルトで追加されているページングリンク以外のすべてのリクエストデータを次のページに追加します。

注::私はあなたがGETリクエストでIDを送信していることに気づきます。悪意のあるユーザーは、データベース構造を見て、それを利用することができます。

関連する問題