CodeIgniterでデータ検索

前回の訂正とお詫び

kenji様のご指摘がありましたので、前回の『CodeIgniterでレコード更新』の間違い箇所を訂正いたします。私が参考にしている書籍が、2.0以前のものでしたので、皆様に誤った情報を公開したことを反省しております。『CodeIgniterではGETのパラメータは$_GETでは、取り出せません』の箇所は誤りで、2.0以降では、デフォルトで $this->input->get() が使えるみたいです。kenji様、ご指摘ありがとうございました。

本日は、CodeIgniterでデータ検索について勉強してみたいと思います。前回の『CodeIgniterでレコードの更新』では、データのID番号を指定して、データ更新をしましたが、実際問題としてデータのID番号を指定してのデータ更新は、現実的ではありませんので、データ検索をして、そのデータ検索の結果からデータ更新するのが一般的だと思います。よって、本日は、目的のデータを曖昧検索で探し出す方法を紹介したいと思います。

ビューファイルの作成

まず、検索のための、ビューファイルを作成します。『aplication/views』フォルダに『dvd_search_view.php』ファイルを作成します。例のごとく、Dreamweaverで作成します。『フォーム』タブのフォームで赤いフォーム枠を作成したら、その中に3行2列のテーブルを作成します。検索文字の箇所にテキストフィールドを挿入します。この辺の手順は何度もやっていますので、今回は省略します。テキストフィールド名は『search』にします。

モデルの作成

ビューファイルをいったん保存したら、今回は、モデルを作成します。データベースにアクセスする処理が多くなってくると、コントローラだけでデータベースアクセスのための処理を書いていくのは、あまりいい方法ではありません。CodeIgniterはコントローラでほとんどの処理はできますが、やはり、データベースアクセスの処理は、コントローラから引き離し、極力簡単に利用できるようにしておいた方がいいと思います。『aplicatison/models』フォルダに『dvd_model.php』ファイルを作成します。

class Dvd_model extends CI_Model{
function __construct()
{
parent:: __construct();
$this->load->database();
}

ここまでは、ほとんど説明の必要はないと思います。コントローラと同じくクラス名の頭文字は大文字にします。まず最初にモデルクラスを継承するコンストラクタを記述します。初期化処理を記述する場合は、『parent:: __construct();』の直下に記述します。

次に検索用のメソッドを記述します。

function search($str)

{
$sql="SELECT * FROM dvd WHERE title like ? OR content like ?";
$query=$this->db->query($sql,array("%{$str}%","%{$str}%"));
return $query->result_array();
}

今回は『$this->db->query()』メソッドを利用します。手順としては、dvdテーブルの中から『title』または、『content』フィールドの中に検索文字列の一部が含まれているレコードを選択し、配列に代入します。第2引数に配列を渡すと、それぞれの?の箇所に配列の要素が指定されます。つまり、検索文字に『test』の文字が送信されると、$sqlは以下のように変化します。

SELECT * FROM dvd WHERE title like %test% OR content like %test%

クエリーに記述される要素を必要に応じて変更させるような場合には、このように『?』を使って記述し、配列で値を埋め込むクエリーを生成させる方法があります。


コントローラの作成

それでは、次にコントローラを作成します。『aplication/controllers』フォルダに『dvd_search.php』ファイルを作成します。

class Dvd_search extends CI_controller{

function index()
{
$this->load->view('dvd_search_view');
}
if($this->input->post('search')!=null){
$search=$this->input->post('search');
$this->load->model('Dvd_model');
$data['records']=$this->Dvd_model->search($search);
$this->load->view('dvd_list_view',$data);
}else{
$this->load->view('dvd_search_view');
}
}
}

まず最初に、検索用のビュー『dvd_search_view』を呼び出します。POST送信の有無を確認し、POST送信されたら、変数$searchに検索の値を代入します。次にモデルを呼び出し、配列に検索の結果を代入します。以前に作っていた、『dvd_list_view』を呼び出し、表示します。

ビューファイルの修正

ビューファイル『dvd_search_view』のフォーム内の『action=””』の箇所を修正します。送信ボタンがクリックされたら、『dvd_search.php』コントローラの『search』メソッドが実行されるように、『action=”dvd_search/search”』と変更します。

ブラウザで確認

それでは、実際にブラウザで確認してみましょう。『http://localhost/CodeIgniter/dvd_search』を開きます。検索文字に『愛』と入力して、送信ボタンをクリックします。

検索結果が表示されました。

本日は以上です。

タグ

2011年7月13日 | コメント/トラックバック(0) |

カテゴリー:CodedIgniter

このページの先頭へ