WinRoadのLaravel4初心者講座

次世代PHPフレームワークのLaravel4を初心者向けに解説して参ります。

Winroad徒然草の管理人がお届けします
ページネーションで嵌まってしまいました

ページネーションで嵌まってしまいました

このエントリーをはてなブックマークに追加

ページネーションで結構嵌まったので、メモしておきたいと思います。

<?php
 class UserController extends BaseController{
 public function getIndex(){
 //ユーザー名をセッションデータから取得
 $username=Session::get('username');
 //検索データを取得
 $data['users']=User::where('username','like',"%".$username."%")->paginate(10);
 return View::make('user/index',$data);
 }
 public function postIndex(){
 //フォームからのデータを取得
 $username=Input::get('username');
 //取得したデータをセッションに保存
 Session::put('username',Input::get('username'));
 //検索データを取得
 $data['users']=User::where('username','like',"%".$username."%")->paginate(10);
 //検索データと一緒にビューを開く
 return View::make('user/index',$data);
 }
 }
  • まず検索したデータはpostIndexで検索値を取得し、ページネーションにデータを格納する。
  • $users->links()で、ページネーションの1ページ目は普通に開くのだが、2ページ目以降がまともに開かない。
  • そこで、getIndex()で、取得するデータは、セッションから検索値を取得することで2ページ目以降も開くようになった。
  • あまりかっこいい方法では無いが、とりあえず動くので良しとする。
  • もう少しかっこいいコードが見つかれば変更する予定。

クエリースコープ

7行目のコードがあまりかっこよくないのでクエリースコープを作成することにします。models/User.phpに下記のコードを追加します。これで、7行目は、User::like(‘username’,$username)->paginate(10)と書き換えることが出来ます。

//複合語の曖昧検索
 public function scopeLike($query,$name,$search){
 //全角スペースを半角スペースに変換
 $keyword = mb_convert_kana($search,'s');
 //検索文字を半角スペースで区切って配列に代入
 $keywords=preg_split('/[\s]+/', $keyword,-1,PREG_SPLIT_NO_EMPTY);
 //配列の数だけ繰り返し
 foreach($keywords as $value){
 $query->where($name,'like','%'.$value.'%');
 }
 return $query;
 }
  • 検索文字を空白(全角又は半角)で区切ることによりand検索が出来るように作成
  • User::like($name,$search)という風に使用。
  • 第1引数に検索フィールド名、第2引数に検索文字列を指定します。
  • 4行目:全角スペースを半角に変換します。
  • 6行目:指定した検索文字列を半角スペースで区切って配列に代入します。
  • 8-10行目:作成した配列の数だけ曖昧検索をかけます。

« »

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です