点击分页时,Laravel 5.2新查询结果将恢复原状

I've applied search form in my app's index page. Results gets updated when I search for something. But when I click on the pagination, it gets me back to old results. So, I guess I've to update the pagination or clear cache or something and how to do it?

In routes.php

Route::get('/', 'BookmarkController@index');
Route::post('/', 'BookmarkController@search');

In BookmarkController.php

public function index(Request $request) {
    $tags_list = Tag::orderBy('tag', 'asc')->get();
    $bookmarks = Bookmark::orderBy('created_at', 'desc')->where('public', '1')->paginate(3);
    $bookmarks_all = Bookmark::orderBy('created_at','desc')->where('public', '1')->get();

    return view('welcome')
        ->with('bookmark', $bookmarks)
        ->with('tags_list', $tags_list)
        ->with('bookmarks_all', $bookmarks_all)
    ;
}

public function search(Request $request) {
    $search_value = $_POST['search'];
    $tags_list = Tag::orderBy('tag', 'asc')->get();
    $bookmarks = Bookmark::orderBy('created_at', 'desc')
        ->where('public', '1')
        ->where('title', 'rlike', $search_value)
        ->orwhere('description', 'rlike', $search_value)
        ->orwhere('contents', 'rlike', $search_value)
        ->orwhere('tags', 'rlike', $search_value)
        ->paginate(3)
    ;

    $bookmarks_all = Bookmark::orderBy('created_at', 'desc')->where('public', '1')->get();

    return view('welcome')
        ->with('bookmark', $bookmarks)
        ->with('tags_list', $tags_list)
        ->with('bookmarks_all', $bookmarks_all)
        ->render()
    ;
}

In welcome.blade.php

    @if (count($bookmark) > 0)
            <div class="row card-row">
            @foreach ($bookmark as $bookmark_single)
                <div class="col-sm-4 col-xs-12 card-parent" data-col="col-sm-4">
                    <div class="card">
                        <div class="card-part1">
                            <div class="img-card">
                                <img src="{{$bookmark_single->thumbnail}}" />
                            </div>
                            <div class="card-content">
                                <h4 class="card-title">
                                    {{ $bookmark_single->title }}
                                </h4>
                                <div class="card-desc">
                                    {{ str_limit($bookmark_single->description, $limit = 50, $end = ' [...]') }}
                                </div>
                            </div>
                            <div class="card-read-more">
                                <p><?php   $tags = $bookmark_single->tags;
                                    $tag_list = explode(',', $tags); ?>
                                    @foreach ($tag_list as $tag)
                                        <a href="/tag/{{$tag}}" class="label label-primary">{{$tag}}</a>
                                    @endforeach
                                </p>
                                <p class="card-user">- &nbsp;<a href="/user/{{ $bookmark_single->bookmarker }}">{{ $bookmark_single->bookmarker }}</a></p>
                                <a class="v-link" target="_blank" href="{{ $bookmark_single->url }}">Visit the link</a>
                            </div>
                            <button type="button" class="btn btn-success btn-circle btn-lg btn-read-more"><i class="fa fa-chevron-right"></i></button>
                        </div>

                        <div class="card-part2 col-xs-0">
                            {{ print $bookmark_single->contents }}
                        </div>
                    </div>
                </div>
            @endforeach
            </div>
            <div class="clearfix text-right">
                {{!!$bookmark->render()!!}}
            </div>
        @endif

Search form HTML in welcome.blade.php

<form id="demo-2" action="/" class="search-form col-sm-4" method="post">
    {{ csrf_field() }}
    <div class="input-group">
        <input id="search" class="form-control" placeholder="Search" name="search" value="" type="text">
        <span class="input-group-btn">
            <button class="btn btn-primary" id="search-btn" type="submit"><i class="fa fa-search"></i></button>
        </span>
    </div>
</form>

When you click on a pagination link you initiate a get request to the same page and end up on your first route that uses BookmarkController@index

One possible solution here is to change search route to get instead of post like:

Route::post('/search', 'BookmarkController@search');

and make sure your pagination applies to this new route like /search?page=2

If you want to keep the search login in the index method you need to make sure non of search filters apply if it's blank

public function index(Request $request) {
    $tags_list = Tag::orderBy('tag', 'asc')->get();
    $bookmarks_all = Bookmark::orderBy('created_at','desc')->where('public', '1')->get();

    $search_value = $request->input('search', '');

    $bookmarks = Bookmark::where(function($query) use ($search_value) {
        if (!empty($search_value)) {
            $query->where('title', 'rlike', $search_value)
            ->orwhere('description', 'rlike', $search_value)
            ->orwhere('contents', 'rlike', $search_value)
            ->orwhere('tags', 'rlike', $search_value)
        }
    })->where('public', '1')->orderBy('created_at', 'desc')->paginate(3);

    return view('welcome')
        ->with('bookmark', $bookmarks)
        ->with('tags_list', $tags_list)
        ->with('bookmarks_all', $bookmarks_all)
    ;
}

And change your search form method to get