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

- コントローラまたはモデルのクラス内のどちらからも こちらで述べている標準のデータベース関連メソッドを利用して接続できます。
- あらかじめデータベース設定ファイルで接続情報に関して設定しておき、 自動接続するかどうかについて `TRUE` (ブール値) をモデル読み込みメソッドの第3引数に渡すことで接続できます: `$this->load->model('Model_name', '', `TRUE`);`
- 第3引数にデータベース接続に関する設定を渡して手動で行うことができます: `$config['hostname'] = "localhost";
  $config['username'] = "myusername";
  $config['password'] = "mypassword";
  $config['database'] = "mydatabase";
  $config['dbdriver'] = "mysql";
  $config['dbprefix'] = "";
  $config['pconnect'] = FALSE;
  $config['db_debug'] = TRUE;
  $this->load->model('Model_name', '', `$config`);`