[CodeIgniter] Modelの使い方
Modelの役割
- ControllerやViewから独立して、DBのデータの取り扱い(CRUD)だけに専念する
- CodeIgniterでは、Modelクラスを継承することで、直感的なDB操作メソッドが利用できる
簡単な例
下記は「Usersテーブルのデータを取得したり件数をカウントしたりするクラス」の例。 /system/application/models/users_model.phpとする。
<?php
class Users_model extends Model {
function __construct() {
// ※コンストラクタでは必ず親クラスを継承する
parent::Model();
// database.php で定義したDBに接続する
$this->load->database();
}
function getAllUsers() {
$query = $this->db->get("users");
if($query->num_rows() > 0) {
// 結果セットを連想配列として返す
return $query->result_array();
}
}
function getUsersWhere($field, $param) {
$this->db->where($field, $param);
$query = $this->db->get("users");
// 結果セットを連想配列として返す
return $ruery->result_array();
}
function getNumUsers() {
return $this->db->count_all("users");
}
}
/** End of PHP file */
データベースクラスの細かい実装は データベースクラス : CodeIgniter ユーザガイド 日本語版 を参照。以下に挙げるものはよく使うので覚えておいた方が良い。
クエリ | 意味 |
---|---|
$this->db->get(‘table_name’) | table_nameテーブル内の全行を取得する |
$this->db->where($field,$param) | SQLのWHERE句の要領で行を取得する (WHERE $field = $param) |
$this->db->count_all(‘table_name’) | table_nameテーブルの行数を取得する |
$query->result_array() | 結果セット(result set)を連想配列として返す |
$query->num_rows() | 結果セットの行数を返す |
このModelクラスのAPIを使うことで、Controllerから簡単にDBのデータを取得できる。
ControllerからModelのAPIを呼び出す
/system/application/controllers/Users.php を下記のようにすることで、上述のモデルで作成したAPIをロードできる。
<?php
class Users extends Controller {
function __construct() {
// ※コンストラクタ内では親クラスをロードするお約束
parent::Controller();
// Usersモデルをロードする
$this->load->model("users_model");
}
function index() {
// Usersモデルで先ほど作成したAPIを利用する
$data["users"] = $this->user_model->getAllUsers();
$data["numusers"] = $this->user_model->getNumUsers();
$this->load->view("users_view", $data);
}
}
/** End of PHP file */
参考
Building a Database-Driven Application with the Code Igniter PHP Framework
(文字がクレイジーなほど小さくて読みづらいので、「PDF Version Of Article」を見るのがおすすめ)