laravel5.1でeloquentを使わずに、DB::select(SQL文)の時も、paginateを使う方法(普通の配列データもOK!)
なんたらcontroller.phpで、レコード取得
表示分(この場合は25件)だけ、別の配列($disp_rec)に分けておくのがミソだね!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// SQLを実行 $all_rec = \DB::select($sql); $per_page = 25; // ページ番号が指定されていなかったら1ページ目 $page_num = isset($request->page) ? $request->page : 1; // ページ番号に従い、表示するレコードを切り出す $disp_rec = array_slice($all_rec, ($page_num-1) * $per_page, $per_page); // ページャーオブジェクトを生成 $pager= new \Illuminate\Pagination\LengthAwarePaginator( $disp_rec, // ページ番号で指定された表示するレコード配列 count($all_rec), // 検索結果の全レコード総数 $per_page, // 1ページ当りの表示数 $page_num, // 表示するページ ['path' => $request->url()] // ページャーのリンク先のURLを指定 ); |
index.blade.php
以下のように、検索キーワード付きにしておかないと、検索結果のpaginateにならない!
get引数からSQL文の検索条件に入れ込んでおく。
1 |
{!! $pager->appends(['search_txt'=>$search_txt])->render(); !!} |
routes.php
1 2 |
// paginate()はgetなので、両方取得出来るようにしておく(laravel検索はpostがデフォ) Route::match(['get', 'post'], 'index', 'なんたらController@index' ); |
SQLレコード以外の配列でも、ページャー表示が簡単に出来るらしいので勉強になった!