drju37335 2016-08-15 15:33
浏览 29

点击分页时,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>
  • 写回答

1条回答 默认 最新

  • douxiajia6104 2016-08-15 15:46
    关注

    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

    评论

报告相同问题?

悬赏问题

  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计