CodeIgniter ユーザガイド 日本語版 Version 2.0.3


モデル

より慣例に沿った MVC アプローチを利用したい人向けに、モデルはオプションで利用可能です。

モデルとは?

モデルは、データベースに格納された情報を用いて機能するようデザインされた PHP のクラスです。たとえば、 CodeIgniter を使ってブログを管理する場合について考えてみましょう。モデルクラスには、ブログのデータを作成、更新そして取得するためのメソッドが含まれます。 そういったモデルクラスは、どのようになっているかを示した例です:

class Blogmodel extends CI_Model {

var $title = '';
var $content = '';
var $date = '';

function __construct()
{
// Model クラスのコンストラクタを呼び出す
parent::__construct();
}

function get_last_ten_entries()
{
$query = $this->db->get('entries', 10);
return $query->result();
}

function insert_entry()
{
$this->title = $_POST['title']; // 下の Note を参照してください
$this->content = $_POST['content'];
$this->date = time();

$this->db->insert('entries', $this);
}

function update_entry()
{
$this->title = $_POST['title'];
$this->content = $_POST['content'];
$this->date = time();

$this->db->update('entries', $this, array('id' => $_POST['id']));
}

}

Note: 上の例で使用しているメソッドは、 Active Record のデータベース関連メソッドです。

Note: この例を簡単にするため、$_POST を直接利用しています。これは一般的に悪い方法です。一般的には、入力クラス の $this->input->post('title') を利用してください。

モデルの詳細

モデルクラスは application/models/ フォルダに格納されます。 サブフォルダで構成したければ、 サブフォルダ内に入れ子にして格納することができます。

モデルクラスの基本的な原型はつぎのとおりです:

class Model_name extends CI_Model {

function __construct()
{
parent::__construct();
}
}

ここでの Model_name はクラス名になります。クラス名は 必ず 大文字で始め、他の文字は小文字にする必要があります。 基底クラスの Model クラスを確実に継承してください。

ファイル名は、クラス名を小文字にしたものになります。たとえばクラスがこんな感じの場合は:

class User_model extends CI_Model {

function __construct()
{
parent::__construct();
}
}

ファイルは次のようになります:

application/models/user_model.php

モデルの読み込み

モデルは、典型的には、コントローラ のメソッドの中で読み込まれ、呼び出されます。 モデルを読み込むには、次のようなメソッドを使用します:

$this->load->model('Model_name');

サブフォルダにモデルを格納している場合は、モデル格納用のフォルダからの相対パスを指定します。たとえば、 application/models/blog/queries.php にモデルを保存している場合、それを使うには、下記のようにします:

$this->load->model('blog/queries');

いったん読み込まれると、モデルのメソッドは、クラス名と同じ名前のオブジェクトを使ってアクセスできます:

$this->load->model('Model_name');

$this->Model_name->function();

モデルを違う名前に割り当てたいときは、読み込みメソッドの第2引数に渡すことで 指定できます:

$this->load->model('Model_name', 'fubar');

$this->fubar->function();

下の例では、コントローラがモデルを読み込み、ビューを表示しています:

class Blog_controller extends CI_Controller {

function blog()
{
$this->load->model('Blog');

$data['query'] = $this->Blog->get_last_ten_entries();

$this->load->view('blog', $data);
}
}

モデルの自動読み込み

もし特定のモデルが、あなたのアプリケーションの中でグローバルに必要な場合、CodeIgniter の初期化時に自動的に読み込むように設定することができます。application/config/autoload.phpファイルを開き、そのモデルを autoload 配列に追加してください。

データベースへの接続

モデルが読み込まれても自動的にはデータベースに接続しません。DB 接続については、次のオプションが選べます: