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


モデル

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

モデルとは?

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

class Blogmodel extends Model {

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

    function Blogmodel()
    {
        // Model クラスのコンストラクタを呼び出す
        parent::Model();
    }
    
    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 Model {

    function Model_name()
    {
        parent::Model();
    }
}

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

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

class User_model extends Model {

    function User_model()
    {
        parent::Model();
    }
}

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

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 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接続については、次のオプションが選べます: