このエントリーをはてなブックマークに追加

更新日: 2016年2月25日

実行時間: 0.0603

モデル

 モデルは、Webページに表示するデータなどを抽象化したオブジェクトになります。例えば、ECサイトでは商品、注文情報、顧客情報などがモデルで扱う情報オブジェクトにあたります。
 多くの場合が、リレーショナルデータベースでそれらの情報を管理することになり、データベースの各テーブルがモデルクラスファイルと対になって管理されることになるでしょう。

モデルファイルの設置場所・ファイル名

 モデルファイルの設置場所は「application/models」ディレクトリ配下となります。
 ファイル名は、小文字でどのようなデータ扱うオブジェクトか分かりやすい名前を付けるとよいでしょう。
「item.php」「order.php」「user.php」と言ったところでしょうか。  この場合、リレーショナルデータベースの「item」「order」「user」テーブルにそれぞれ紐づくことになります。

モデルクラス

 CodeIgniterのモデルはコントローラクラス同様、クラスファイルとなり、クラス名はファイル名の先頭を大文字にしたものとなります。
また、CodeIgniterの機能を利用するため、コアクラスをオーバーライドします。

  • クラス名「User」
  • class User extends CI_Model
    {
        // プロパティやロジック
    }

コンストラクタ 一番上に戻る

 モデルクラスのコンストラクタでは、プロパティの初期化やデータベース接続などの各メソッドを利用するための共通処理を記述します。
 また、オーバーライドしているコアクラスのコンストラクタを呼び出す必要があります。

  • コンストラクタ
  • class User extends CI_Model
    {
        public function __construct()
        {
            parent::__construct();

            // 独自処理
        }
    }

モデルクラスの利用 一番上に戻る

 モデルクラスは、コントローラまたは、他のモデルクラスから利用されることになります。
モデルクラスを利用するには、まず、モデルクラスをロードしてオブジェクトにします。
 「$this->load->model('モデルクラス名')」でロードしてオブジェクト化することができます。
ロードした後は、「$this->モデルクラス名」がそのオブジェクトとなります。

 モデルクラスをロードする際に、第2引数にオブジェクト名を指定することができます。
複数のオブジェクトが必要な時などに別々のオブジェクト名を指定してロードすることで、 それぞれのオブジェクトを使い分けることができます。

  • モデルクラスロード
  • $this->load->model('User');
  • モデルオブジェクトの利用
  • $this->User->メソッド()
  • オブジェクト名を指定したモデルクラスロード
  • $this->load->model('User', 'user');
  • モデルオブジェクトの利用
  • $this->user->メソッド()

 以下はサンプルコードです。

  • モデルクラス
  • class User extends CI_Model
    {
        private $_names;

        public function __construct()
        {
            parent::__construct();
            $this->_names = array(
                'taro' => '太郎',
                'hanako' => '花子'
            );
        }

        public function getNameJa($name)
        {
            if (isset($this->_names[$name])) {
                return $this->_names[$name];
            }
            return FALSE
        }
    }
  • コントローラ等呼び出す側
  •     $this->load->model('User', 'user', TRUE);
        if ($name = $this->user->getNameJa($firstname)) {
            echo '名前= ' . $name;
        }
        $this->load->model('User', 'user', 'my_db');
        if ($name = $this->user->getNameJa($firstname)) {
            echo '名前= ' . $name;
        }

 モデルクラスロードの3つめの引数で、ロードする際にデータベースに接続するか否かを指定することができます。
 TRUEを指定すると「default」データベースに接続します。 また、接続するデータベースグループ名(config/database.phpの「$db['グループ名']」)を指定することもできます。

データベース接続 一番上に戻る

 データベースに接続するには3つの方法があります。

  1. モデルをロードする際に指定する方法
  2. コンストラクタなどモデルクラス内で指定する方法
  3. autoload.phpによる自動接続する方法

データベース接続については別の項で詳しく説明します。