Laravelで一覧ページをページング(実践編その3)

前回、基礎編に戻って、『Laravleのページネーション』を調べてみました。今日は、実際に『Laravelでデータの一覧表示』で、作成した一覧ページをページングしてみたいと思います。

Fluentクエリービルダーでページング

1. 前回調べたとおり、Fluentクエリービルダーも、EloquentORMのページネーションするには、paginateメソッドを使用します。

2. それでは、まず、collectionコントローラのindexアクションを下記のように修正します。

larave/application/controllers/collection.php

//Fluentクエリービルダーでページングする
 $data['collections']=DB::table('collections')
 //降順に並べ替え
 ->order_by('created_at','desc')
 //1ページに10件ずつ表示
 ->paginate(10);
 return View::make('collection/index',$data);

3. ビューファイルを下記のように修正します。

laravel/application/views/collection/index.blade.php

@layout('layouts.master')
@section('content')
トップページです
{{-- 全ページリンクの表示 --}}
{{ $collections->links() }}
{{-- 前後ページリンクの表示 --}}
<div class="pagination"><ul>
{{ $collections->previous() }}
{{ $collections->next() }}
</ul></div>
<table class="table table-striped table-bordered">
 <tr>
 <th>id</th>
 <th>タイトル</th>
 <th>作成日</th>
 <th>更新日</th>
 <th>保管場所</th>
 </tr>
@foreach($collections->results as $row)
 <tr>
 <td>{{ $row->id }}</td>
 <td>{{ $row->title }}</td>
 <td>{{ $row->created_at }}</td>
 <td>{{ $row->updated_at }}</td>
 <td>{{ $row->save_space }}</td>
 </tr>
@endforeach
</table>
@endsection

全ページリンクと前後ページリンクを同時に表示することは無いと思いますが、分かり易いように上下に表示しました。全ページリンクの方は、全く手を入れなくてもTwitterBootstrapのレイアウトで決まったのですが、前後ページは7行目と10行目のタグを追加することで、下記のような表示となりました。

4. 前回も表示しましたが、ブラウザで表示してみます。

EloquentORMでページング

5. それでは、次にElquentORMでページングをしてみましょう。indexアクションを下記のように修正します。

laravle/application/controllers/collection.php

//EloquntORMでページング
 $data['collections']=Collection::order_by('created_at','desc')->paginate(10);
 return View::make('collection/index',$data);

6. これで、完了です。ちょっと簡単すぎますね。これでは、あまりにも簡単すぎますので、ビューにデータを渡す方法をいくつか復習してみましょう。

7. withメソッドで、ビューにデータを渡す

//withメソッドで、ビューにデータを渡す
 $page=Collection::order_by('created_at','desc')->paginate(10);
 $view=View::make('collection/index');
 $view->with('collections',$page->results);
 $view->with('links',$page->links());
 $view->with('previous',$page->previous());
 $view->with('next',$page->next());
 return $view;

8. 配列でビューにデータを渡す

//配列でビューにデータを渡す
 $page=Collection::order_by('created_at','desc')->paginate(10);
 $view=View::make('collection/index',array(
 'collections'=>$page->results,
 'links'=>$page->links(),
 'previous'=>$page->previous(),
 'next'=>$page->next(),
 ));
 return $view;

9. マジックメソッドでデータを渡す

//マジックメソッドでデータを渡す
 $page=Collection::order_by('created_at','desc')->paginate(10);
 $view=View::make('collection/index');
 $view->collections=$page->results;
 $view->links=$page->links();
 $view->previous=$page->previous();
 $view->next=$page->next();
 return $view;

10. 配列アクセスインターフェイスでデータを渡す

//配列アクセスインターフェイスでデータを渡す
 $page=Collection::order_by('created_at','desc')->paginate(10);
 $view=View::make('collection/index');
 $view['collections']=$page->results;
 $view['links']=$page->links();
 $view['previous']=$page->previous();
 $view['next']=$page->next();
 return $view;

11. 尚、上記の7~10迄で渡したデータの取得方法は、3のビューファイルとは違いますので、ビューファイルを下記のように修正します。

laravel/application/views/collection/index.blade.php

@layout('layouts.master')
@section('content')
トップページです
{{-- 全ページリンクの表示 --}}
{{ $links }}
{{-- 前後ページリンクの表示 --}}
<div class="pagination"><ul>
{{ $previous }}
{{ $next }}
</ul></div>
<table class="table table-striped table-bordered">
 <tr>
 <th>id</th>
 <th>タイトル</th>
 <th>作成日</th>
 <th>更新日</th>
 <th>保管場所</th>
 </tr>
@foreach($collections as $row)
 <tr>
 <td>{{ $row->id }}</td>
 <td>{{ $row->title }}</td>
 <td>{{ $row->created_at }}</td>
 <td>{{ $row->updated_at }}</td>
 <td>{{ $row->save_space }}</td>
 </tr>
@endforeach
</table>
@endsection

本日はLaravelでページングするのが余りに簡単すぎて、ちょっと時間が余ったので、コントローラからビューへデータを渡す方法を復習しました。

明日は、基礎編に戻って、『Laravelのバリデーション』について調べてみます。本日は以上です。

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

トラックバック&コメント

この投稿のトラックバックURL:

コメントをどうぞ

このページの先頭へ