dounianxie2058 2016-10-08 05:41
浏览 57
已采纳

Laravel 5 - 在分页搜索结果中出错

I have a problem with the pagination of search results. I get the first page right, but for page 2 I get this error:

QueryException in Connection.php line 729:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'page' in 'where clause' (SQL: select count(*) as aggregate from `books` where `id` like %% and `page` like %2% and `books`.`deleted_at` is null)

My route:

Route::get('books/search', 'BookController@searchForm');
Route::get('books/results', 'BookController@searchProcess');

Controller:

use Search; //search trait
public function searchForm(){
    return view('books.search.form');
 }
public function searchProcess(Request $request){
     $result = $this->performSearch($request, $this->model);
     return view('books.search.result', compact('result'));
}

Search Trait (A class in another file):

protected function performSearch($request, $model){
    $searchFields = $request->toArray();
    unset($searchFields['_token']);
    $searchFields = array_filter($searchFields);
    if (empty($searchFields)) {
        return back();
    }
    $list = $model->where('id', 'like', '%%');
    foreach ($searchFields as $column => $value) {
        $list->where($column, 'like', '%'.$value.'%');
    }
    return $list->paginate(10);
}

View for showing results:

    <div class="table-responsive">
        <table class="table table-hover table-bordered">
            <tr>
                <th>Results</th>
            </tr>
            @foreach($result as $datum)
                <tr>
                    <td><a href="{{route('books.show', $datum->id)}}">{{$datum->title}}</a></td>
                </tr>    
            @endforeach
        </table>
    </div>
    @if($result->lastPage() > 1)
        <nav class="text-center">
            {{$result->links()}}
        </nav>
    @endif

I am using Laravel 5.2

  • 写回答

1条回答 默认 最新

  • duangan4070 2016-10-08 05:46
    关注

    seems you are passing page parameter in the query so i think you need to remove page parameter from the query building

    protected function performSearch($request, $model)
    {
        $searchFields = $request->except(['_token', 'page']); // get all fields except _token and page you can add more parameters in array if they are in request but not in database table column
        $searchFields = array_filter($searchFields);
        if (empty($searchFields)) {
            return back();
        }
        $list = $model->where('id', 'like', '%%');
        foreach ($searchFields as $column => $value) {
            $list->where($column, 'like', '%'.$value.'%');
        }
        return $list->paginate(10);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试