モデル¶
モデルはより伝統的な MVC アプローチを使用したい人のために、 必要に応じて ご利用いただけます。
モデルとは何ですか?¶
モデルとは PHP クラスであり、データベースの情報とともに動作するように設計されるものです。 たとえば、 CodeIgniter でブログを管理するとしましょう。 モデルクラスはブログのデータを挿入、更新、 および取得するための関数を含むモデルクラスが必要でしょう。 これはこのようなモデルクラスの例です:
class Blog_model extends CI_Model {
public $title;
public $content;
public $date;
public function __construct()
{
// CI_Model constructor の呼び出し
parent::__construct();
}
public function get_last_ten_entries()
{
$query = $this->db->get('entries', 10);
return $query->result();
}
public function insert_entry()
{
$this->title = $_POST['title']; // 後述の注意書き参照
$this->content = $_POST['content'];
$this->date = time();
$this->db->insert('entries', $this);
}
public function update_entry()
{
$this->title = $_POST['title'];
$this->content = $_POST['content'];
$this->date = time();
$this->db->update('entries', $this, array('id' => $_POST['id']));
}
}
Note
上記の例では クエリビルダ データベースメソッドを使っています。
Note
この例では簡潔に書くため、直接 $_POST
を使用しています。
これは一般には悪いプラクティスであり、より一般的なアプローチはとしては
入力ライブラリ の
$this->input->post('title')
を使用してください。
モデルの作りを調べる¶
モデルクラスは application/models/ ディレクトリに格納されています。 分類分けをしたいなら、サブディレクトリ内にネストすることが できます。
モデルクラスの基本的なプロトタイプはこのようになります:
class Model_name extends CI_Model {
public function __construct()
{
parent::__construct();
}
}
Model_name の箇所はクラス名です。クラス名は頭文字は大文字で、残りは小文字である 必要があります。 クラスは、 基本モデルクラスを継承してください。
ファイル名はクラス名と一致する必要があります。たとえば、このクラスの場合:
class User_model extends CI_Model {
public function __construct()
{
parent::__construct();
}
}
ファイルはこのようになります:
application/models/User_model.php
モデルのロード¶
モデルは一般的に コントローラ メソッドでロードされ、呼び出されます。 モデルをロードするにはつぎのメソッドを使います:
$this->load->model('model_name');
モデルがサブディレクトリに配置されている場合、 models ディレクトリからの相対パスを含めます。たとえば、 application/models/blog/Queries.php にモデルがある場合、次のようにロードします:
$this->load->model('blog/queries');
いちどロードされたら、クラスと同じ名前を持つオブジェクトを使用して、 モデルのメソッドにアクセスします:
$this->load->model('model_name');
$this->model_name->method();
モデルに別のオブジェクト名を割り当てたい場合は、 ロードメソッドの 第 2 引数により指定することができます:
$this->load->model('model_name', 'foobar');
$this->foobar->method();
つぎのコントローラの一例は、モデルをロードし、 ビューを提供しています:
class Blog_controller extends CI_Controller {
public function blog()
{
$this->load->model('blog');
$data['query'] = $this->blog->get_last_ten_entries();
$this->load->view('blog', $data);
}
}
モデルのオートローディング¶
アプリケーション全体でグローバルに特定のモデルが必要となった場合、 システムの初期化時に自動的にロードするように CodeIgniter に設定することができます。 application/config/autoload.php ファイルを開き、 オートロード配列にモデルを追加するだけでおわります。
データベースへの接続¶
モデルがロードされても、自動的にはデータベースに接続 しません 。 接続するための以下のオプションが利用できます:
標準的なデータベース方法を用いて接続することができます、 ここで説明しているものです、コントローラクラスとモデルクラスの どちらからでもできます。
第 3 引数に TRUE (真偽値) を渡すことでロード時に自動接続させることができます。 接続設定はデータベースの設定ファイルで定義されているものを使用します:
$this->load->model('model_name', '', TRUE);
第 3 引数に手動でデータベース接続設定を渡すことが できます:
$config['hostname'] = 'localhost'; $config['username'] = 'myusername'; $config['password'] = 'mypassword'; $config['database'] = 'mydatabase'; $config['dbdriver'] = 'mysqli'; $config['dbprefix'] = ''; $config['pconnect'] = FALSE; $config['db_debug'] = TRUE; $this->load->model('model_name', '', $config);