2016-10-08 9 views
0

検索結果のページ区切りに問題があります。私は、最初のページの権利を取得しますが、2ページのために私はこのエラーを取得する:Laravel5 - 検索結果のページ付けエラーが発生しました

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) 

マイルート:

Route::get('books/search', '[email protected]'); 
Route::get('books/results', '[email protected]'); 

コントローラー:

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

検索形質(別のファイル内のクラス):

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); 
} 

showinグラム結果:

<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 

私はLaravel 5.2

答えて

1

を使用していますが、クエリでページパラメータを渡しているようですので、私はあなたが

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); 
} 
+0

を構築するクエリからページパラメータを削除する必要があると思うそれが働きましたあなたのために?それがパラメータに関する唯一の問題だと思われます。 それがうまくいっていると他の人が参考になるように質問に印をつけてください。 –

+0

問題の一部を解決していただきありがとうございます。もう1つの問題は、検索トークンがpage2に渡されないため、結果がないことです。たとえば、title = "php"を検索している場合、私がpage2に行くとtitle = ""を検索します。これをどうすれば解決できますか? – irza

+0

あなたはすべてのフィルタリングされた値をURLのパラメータとして渡すことができます。したがって、page1 title = "php"の場合、ページリンクは/ page2?title = php となるので、$ requestにも2ページでtitle = "php" - > params( 'page'); パラメータを指定してurlを生成するには、route()メソッドまたはaction()メソッドを使用します。 –

関連する問題