モデル
多くの場合が、リレーショナルデータベースでそれらの情報を管理することになり、データベースの各テーブルがモデルクラスファイルと対になって管理されることになるでしょう。
モデルファイルの設置場所・ファイル名
モデルファイルの設置場所は「application/models」ディレクトリ配下となります。
ファイル名は、小文字でどのようなデータ扱うオブジェクトか分かりやすい名前を付けるとよいでしょう。
「item.php」「order.php」「user.php」と言ったところでしょうか。
この場合、リレーショナルデータベースの「item」「order」「user」テーブルにそれぞれ紐づくことになります。
モデルクラス
CodeIgniterのモデルはコントローラクラス同様、クラスファイルとなり、クラス名はファイル名の先頭を大文字にしたものとなります。
また、CodeIgniterの機能を利用するため、コアクラスをオーバーライドします。
- クラス名「User」
{
// プロパティやロジック
}
コンストラクタ 一番上に戻る
モデルクラスのコンストラクタでは、プロパティの初期化やデータベース接続などの各メソッドを利用するための共通処理を記述します。
また、オーバーライドしているコアクラスのコンストラクタを呼び出す必要があります。
- コンストラクタ
{
public function __construct()
{
parent::__construct();
// 独自処理
}
}
モデルクラスの利用 一番上に戻る
モデルクラスは、コントローラまたは、他のモデルクラスから利用されることになります。
モデルクラスを利用するには、まず、モデルクラスをロードしてオブジェクトにします。
「$this->load->model('モデルクラス名')」でロードしてオブジェクト化することができます。
ロードした後は、「$this->モデルクラス名」がそのオブジェクトとなります。
モデルクラスをロードする際に、第2引数にオブジェクト名を指定することができます。
複数のオブジェクトが必要な時などに別々のオブジェクト名を指定してロードすることで、
それぞれのオブジェクトを使い分けることができます。
- モデルクラスロード
- モデルオブジェクトの利用
- オブジェクト名を指定したモデルクラスロード
- モデルオブジェクトの利用
以下はサンプルコードです。
- モデルクラス
- コントローラ等呼び出す側
{
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
}
}
if ($name = $this->user->getNameJa($firstname)) {
echo '名前= ' . $name;
}
if ($name = $this->user->getNameJa($firstname)) {
echo '名前= ' . $name;
}
モデルクラスロードの3つめの引数で、ロードする際にデータベースに接続するか否かを指定することができます。
TRUEを指定すると「default」データベースに接続します。
また、接続するデータベースグループ名(config/database.phpの「$db['グループ名']」)を指定することもできます。
データベース接続 一番上に戻る
データベースに接続するには3つの方法があります。
- モデルをロードする際に指定する方法
- コンストラクタなどモデルクラス内で指定する方法
- autoload.phpによる自動接続する方法