在laravel中无法使用分页搜索。

问题描述 投票:0回答:1

我把它放在1条路线内

Route::get('/all-students', 'AdminController@studentList')->name('admin.student');
Route::post('/all-students', 'AdminController@searchByClassRoll')->name('search-by-class-roll');

在控制器功能学生名单中

public function studentList(Request $request)
{
    Session::put('url.intended2', URL::current());
    Session::put('url.intended', URL::previous());

    if (isset($request->class)) {
        if (isset($request->roll)) {
            if ($request->class == 'all') {
                $students = DB::table('students')
                    ->where('roll', '=', $request->roll)
                    ->orderBy('id', 'DESC')
                    ->paginate(20);
            } else {
                $students = DB::table('students')
                    ->where('roll', '=', $request->roll)
                    ->where('class', '=', $request->class)
                    ->orderBy('id', 'DESC')
                    ->paginate(20);
            }
        } else {
            if ($request->class == 'all') {
                return redirect()->route('admin.student');
            } else {
                $students = DB::table('students')
                    ->where('class', '=', $request->class)
                    ->orderBy('id', 'DESC')
                    ->paginate(20);
            }
        }
    } else {
        $students = DB::table('students')
            ->orderBy('id', 'DESC')
            ->paginate(20);
    }


    return view('admin.student-list')->with('students', $students);
}

邮政方式

public function searchByClassRoll(Request $request)
{
    $class = $request->class;
    $roll = $request->roll;
    if (isset($request->class)) {
        if (isset($request->roll)) {
            return redirect()->route('admin.student', ['class' => $class, 'roll' => $roll]);
        } else {
            return redirect()->route('admin.student', ['class' => $class]);
        }
    }
}

在叶片

@if(method_exists($students,'links'))
    {!! $students->links() !!}
@endif

通常当我点击第2页时,它返回all-students?page=2当我搜索一些 all-students?class=2 然后,我点击分页,它又返回了 all-students?page=2 并删除URL中的搜索数据。

从视图中删除表格

<form action="{{ route('search-by-class-roll') }}" method="post">
    {{ csrf_field() }}
    <input type="hidden" name="type" value="student_list">
    <div class="row gutters-8">
        <div class="col-4-xxxl col-xl-4 col-lg-3 col-12 form-group">
            <div class="ui-alart-box">
                <div class="default-alart">
                    <div class="result" role="alert">
                        @if(app('request')->input('class') || app('request')->input('roll'))
                            <a href="{{route('admin.student')}}">See All</a><span> | </span>
                        @endif
                        Showing results {{$students->count()}} of {{$students->total()}} entries
                    </div>
                </div>
            </div>
        </div>
        <div class="col-3-xxxl col-xl-3 col-lg-3 col-12 form-group">
            <input type="number" name="roll" placeholder="Search by Roll..." class="form-control">
        </div>
        <div class="col-4-xxxl col-xl-3 col-lg-3 col-12 form-group">
            <select class="select2 form-control" name="class" required>
                <option value="all">All Classes</option>
                <option value="baby">baby</option>
                <option value="nursery">nursery</option>
                <option value="1">one</option>
                <option value="2">two</option>
                <option value="3">three</option>
                <option value="4">four</option>
                <option value="5">five</option>
                <option value="6">six</option>
                <option value="7">seven</option>
                <option value="8">eight</option>
                <option value="9">nine</option>
                <option value="10">ten</option>
            </select>
        </div>
        <div class="col-1-xxxl col-xl-2 col-lg-3 col-12 form-group">
            <button type="submit" class="fw-btn-fill btn-gradient-yellow">SEARCH</button>
        </div>
    </div>
</form>

我想将其制作成一个 URL,因为如果有人手动输入带有搜索数据的 URL,他就可以看到输出结果,但在这里,我无法从 blade 中获得带分页的结果。

php laravel search pagination
1个回答
1
投票

直接来到你的控制器。你不需要任何其他的路由或方法,你可以在同一个路由和同一个方法中处理这个过滤。

public function studentList(Request $request)
{
    if(!empty($request)){
        $query = $request->all();
       $students = DB::table('students')->orderBy('id', 'DESC');
       if(isset($request->class) AND $request->class != '' AND $request->class != 'all')
           $students = $students->where('class', '=', $request->class);
       if(isset($request->roll) AND $request->roll != '')
           $students = $students->where('roll', '=', $request->roll);
       $students = $students->paginate(20);

        return view('admin.student-list', compact('students','query'));
    }

    $students = DB::table('students')
                ->orderBy('id', 'DESC')
                ->paginate(20);
   return view('admin.student-list', compact('students'));
}

在你的视图中改变一些东西

<form action="{{ route('admin.student') }}" method="get"> change route and method to get
{{ csrf_field() }} //remove this

在你的表内视图下面写下这段代码。该 appends() 是最重要的,否则过滤后的数据中的分页将无法使用。

@if(isset($query))
  {{ $students->appends($query)->links() }}
@else
  {{ $students->links() }}
@endif

1
投票

尝试在分页器刀片上使用追加功能

{{$students->appends(\Illuminate\Support\Facades\Input::except('page'))->links()}}
© www.soinside.com 2019 - 2024. All rights reserved.