2017-03-21 35 views
1

第一頁將正確排序。然而,第二頁(和更進一步)將回到如同搜索中沒有字段被填充一樣。搜索後分頁僅適用於第一頁

我收集在下面的表格搜索字段:

{{ 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() }} 

一旦提交後,將創下GET路線

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

然後用戶控制器:

$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')); 

然後,在視圖中我添加了像這樣的分頁鏈接:

{{ $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 

但第二頁會是這樣的:

search?page=2 

我發現這很令人費解,並不太清楚是什麼原因造成搜索在第二頁上失敗。

+0

您是否在包含分頁按鈕的表單中包含所有搜索參數(作爲隱藏輸入)? – Amarnasan

回答

0

From the docs:

追加到分頁鏈接

您可以追加到使用 方法追加分頁鏈接的查詢字符串。例如,要排序=票附加到每個分頁 鏈接,你應該做以下調用來追加:

{{ $users->appends(['sort' => 'votes'])->links() }}如果你想 追加了「散列片段」的分頁程序的網址,你可以使用 片段方法。例如,要追加#foo每個 分頁鏈路的末端,做如下調用片段方法:

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

你幾乎在正確的軌道上與此:

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

當你切換頁面時,這個代碼的和平確實帶來了頁面請求,這是必要的,因爲這是爲你完成的。所以你需要指定你想要保留的請求數據。因此,例如:

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

將所有請求數據添加到下一個頁面,除了分頁鏈接,因爲默認情況下添加。

注意:我注意到你發送id的GET請求,請小心這樣做。意圖不好的用戶可以看到你的數據庫結構並可能使用它。

相關問題