CakePHPで検索機能の実装を少し楽する
4月 22nd, 2008 admin Posted in CakePHP, 今日のコード | 1 Comment »
- 検索
- ページング
- ソート
この3つさえなければ僕はWebアプリが大好きです。
CakePHP1.2での簡単なやり方
CakePHP1.2ならLIKE文なんかをある程度作ってくれるのでWHER 1=1 AND...とか書かなくてOKで少しうれしいです。
コード
usernameとpasswordが入ったUserモデルとuser_idとかnameとかname_ruby,tel_mobileとかが入ったProfileモデルに対してAND検索をする例。
/admin_index.ctp
PHP:
-
<h2>ユーザの検索</h2>
-
<form action="<?php echo $html->url('/admin/users/index'); ?>" method="get">
-
<table>
-
<tr>
-
<th width="20%">ログインID</th>
-
<td>
-
</td>
-
</tr>
-
<tr>
-
<th>名前</th>
-
<td>
-
</td>
-
</tr>
-
<tr>
-
<th>フリガナ</th>
-
<td>
-
</td>
-
</tr>
-
<tr>
-
<th>携帯電話番号</th>
-
<td>
-
</td>
-
</tr>
-
</table>
/users_controller.php
PHP:
-
function admin_index() {
-
//検索ワードがあるかどうか
-
$conditions = null;
-
$this->data['Words'] = $this->params['url']['data']['Words'];
-
$like = $this->_create_like_conditions($this->params['url']['data']['Words']);
-
}
-
$this->User->recursive = 0;
-
$this->set('users', $this->paginate($conditions));
-
}
-
-
function _create_like_conditions($data){
-
foreach($data as $k=>$v){
-
$like[$k] = 'like %'.$v.'%';
-
}
-
return $like;
-
}
まとめ
likeのところは、or,not,in,between,regexp,<>にも対応しています。また今回はand検索でしたがもちろんorでもいけます。
みんなには嫌われているけど現場では他に選択肢がないため大活躍なジャックバウワーのような存在「PHP+CakePHP」、今日も助かったよ!
8月 20th, 2009 at 15:10:37
じゃっくばうあー