Symfoware

Symfowareについての考察blog

CodeIgniter 3 Modelsの使い方(General Topics - Models)

CodeIgniter User Guide

General TopicsのModelsについて調べてみます。
Models



What is a Model?



モデルはデータベースからデータを取得するのが楽になるよう設計されています。
Blogのデータを管理するモデルはこんな感じになります。


  1. class Blog_model extends CI_Model {
  2.     public $title;
  3.     public $content;
  4.     public $date;
  5.     public function __construct() {
  6.         // Call the CI_Model constructor
  7.         parent::__construct();
  8.     }
  9.     public function get_last_ten_entries() {
  10.         $query = $this->db->get('entries', 10);
  11.         return $query->result();
  12.     }
  13.     public function insert_entry() {
  14.         $this->title    = $this->input->post('title');
  15.         $this->content = $this->input->post('content');
  16.         $this->date     = time();
  17.         $this->db->insert('entries', $this);
  18.     }
  19.     public function update_entry() {
  20.         $this->title    = $this->input->post('title');
  21.         $this->content = $this->input->post('content');
  22.         $this->date     = time();
  23.         $this->db->update('entries', $this, array('id' => $_POST['id']));
  24.     }
  25. }




※データ操作の詳細はQuery Builderの項目に記載されています。




Anatomy of a Model



モデルクラスは、application/models/に配置するルールです。
ひな形は以下のようになります。


  1. class Model_name extends CI_Model {
  2.     public function __construct() {
  3.         parent::__construct();
  4.     }
  5. }




クラス名とファイル名は同じものとし、大文字で開始する必要があります。
実例として、Userモデルを定義してみます。


  1. class User_model extends CI_Model {
  2.     public function __construct() {
  3.         parent::__construct();
  4.     }
  5. }




上記の内容を
「application/models/User_model.php」
というファイル名で保存します。




Loading a Model



モデルはコントローラークラスでロードして使用します。


  1. $this->load->model('model_name');




もし、モデルをapplication/modelsのサブディレクトリ、
例えば「application/models/blog/Queries.php」
に配置している場合のロード方法は以下のようになります。


  1. $this->load->model('blog/queries');





ロードしたモデルにあるメソッドを呼び出す方法はこうなります。


  1. $this->load->model('model_name');
  2. $this->model_name->method();





別のディレクトリに同じ名前があるなど、モデルに別名を付けたい場合は、
第二引数に別名を指定します。


  1. $this->load->model('model_name', 'foobar');
  2. $this->foobar->method();





コントローラーからモデルをロードし、メソッドを呼び出すサンプルです。


  1. class Blog_controller extends CI_Controller {
  2.     public function blog() {
  3.         $this->load->model('blog');
  4.         $data['query'] = $this->blog->get_last_ten_entries();
  5.         $this->load->view('blog', $data);
  6.     }
  7. }






Auto-loading Models



全てのコントローラーで使用するモデルがある場合、毎回ロードするのは面倒です。
application/config/autoload.phpに、デフォルトでロードするモデルを指定することができます。


  1. /*
  2. | -------------------------------------------------------------------
  3. | Auto-load Models
  4. | -------------------------------------------------------------------
  5. | Prototype:
  6. |
  7. |    $autoload['model'] = array('first_model', 'second_model');
  8. |
  9. | You can also supply an alternative model name to be assigned
  10. | in the controller:
  11. |
  12. |    $autoload['model'] = array('first_model' => 'first');
  13. */
  14. $autoload['model'] = array();







Connecting to your Database



モデルをロードした時、データベースに自動的には接続しません。
ロードと同時にデータベースに接続してほしい場合には、第三引数に「true」を指定します。


  1. $this->load->model('model_name', '', TRUE);




データベースへの接続情報は、
application/config/database.php
に記載しますが、プログラム中で指定することも可能です。


  1. $config['hostname'] = 'localhost';
  2. $config['username'] = 'myusername';
  3. $config['password'] = 'mypassword';
  4. $config['database'] = 'mydatabase';
  5. $config['dbdriver'] = 'mysqli';
  6. $config['dbprefix'] = '';
  7. $config['pconnect'] = FALSE;
  8. $config['db_debug'] = TRUE;
  9. $this->load->model('model_name', '', $config);







CodeIgniter 3のユーザーガイド(User Guide)まとめ
関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/01/25(日) 11:30:42|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<CodeIgniter 3 Helperの使い方(General Topics - Helper) | ホーム | CodeIgniter 3 Viewの使い方(General Topics - Views)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1599-0bdf1a0e
この記事にトラックバックする(FC2ブログユーザー)