Laravelでページネーション機能を実装したため、メモとして残しておきます。
画面に表示させる件数指定も簡単にできます。
Laravelでページネーション機能を実装する
DBのテーブルは以下のように設定。
モデルのperPageに値を格納することで、1ページに何件表示するか設定できます。
app\Movie.php
1 2 3 4 5 6 7 8 9 10 11 | <?php namespace App; use Illuminate\Database\Eloquent\Model; class Movie extends Model { protected $fillable = [ // protected $perPage = 1; ]; } |
ルーティングを設定。
routes\web.php
1 | Route::get('/list', 'MovieController@getIndex'); |
画面に表示させる件数を指定する方法
paginate()のカッコ内で何件表示するか指定できます
今回は、1ページに3件取得するよう設定。
app\Http\Controllers\MovieController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php namespace App\Http\Controllers; use App\Movie; class MovieController extends Controller { public function getIndex() { $data = Movie::paginate(3); return view('movie.index', compact('data')); } } |
共通テンプレートを追加。
resources\views\layouts\app.blade.php
1 2 3 4 5 6 7 8 9 10 | <!doctype html> <html> <head> <meta charset="utf-8"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"> </head> <body> @yield('content') </body> </html> |
{{ $data->links() }}を追加して、ページネーションを実装します。
resources\views\movie\index.blade.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | @extends('layouts.app') @section('content') <table class="table table-striped"> <tr> <th></th> <th>タイトル</th> <th>興行収入(億)</th> <th>公開年</th> </tr> @foreach($data as $item) <tr> <td>{{{ $item->id }}}</td> <td>{{{ $item->title }}}</td> <td>{{{ $item->income }}}</td> <td>{{{ $item->year }}}</td> </tr> @endforeach </table> {{ $data->links() }} @endsection |
ページにアクセスすると以下のような画面が表示され、ページネーションが実装されていることが確認できます。
ページネーションを前後移動にする方法
simpePaginateにすることで、ページネーションを前後移動に変更できます。
app\Http\Controllers\MovieController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php namespace App\Http\Controllers; use App\Movie; class MovieController extends Controller { public function getIndex() { $data = Movie::simpePaginate(3); return view('movie.index', compact('data')); } } |
ページにアクセスすると以下の画面のようにページネーションが変更されていることを確認できます。
Laravelはこんなにも簡単にページネーションが実装できるとは。