CodeIgniter のビューの続き。
モデルについて。
モデルクラスは application/models/ フォルダに以下に置く。
モデルの定義は以下のような感じ。
ファイル: application/models/blog_model.php
<?php
class Blog_model extends Model {
...
}
?>
モデルを使用するには以下のようにコントローラで「$this->load->model(’Blog_model’);
」とか明示的に書く必要がある。
ファイル: application/controllers/blog.php
<?php
class Blog extends Controller {
function index()
{
$this->load->model('Blog_model');
...
}
...
}
?>
(上の例は微妙かも。コンストラクタに書いとけばいい気も。)
こうすると「$this->Blog_model」ってな感じでモデルにアクセスできるようになる。
でもこれだけじゃまだDBには繋がらない。
DBに接続するには以下のファイルを編集して「自動接続」を有効にする必要がある。
ファイル: application/config/autoload.php
$autoload['libraries'] = array('database');
↑「$autoload[’libraries’]」に「’database’」を追加してる。
あと、DB に接続するための設定も当然必要で、それは以下のファイルに記述する。
application/config/database.php
デフォルトでMySQLの設定が書いてあったので今回はMySQLを使うことに。
(SQLiteでやりたかったけど、そのための情報をすぐに見つけられなかったのでやめた。)
とりあえずMySQLに以下のようなテーブルを作った。
CREATE TABLE `ci`.`blogs` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `title` VARCHAR( 255 ) NOT NULL , `content` TEXT NOT NULL ) ENGINE = InnoDB
テストデータ:
INSERT INTO `ci`.`blogs` ( `title` , `content` ) VALUES ( 'テスト', 'テストですよー' );
んで、コントローラを以下のようにすると画面にテーブルの内容が出てくる。
ファイル: application/controllers/blog.php
<?php
class Blog extends Controller {
function index()
{
$this->load->model('Blog_model');
$blogs = $this->Blog_model->db->get('blogs', 10)->result();
var_dump($blogs);
}
}
?>
スクリーンショット:

やったー。
ま、でも、var_dumpしただけで喜んでちゃいけない。
DB周りをもうちょっと突っ込んで調べないと。
参考:
CodeIgniter ユーザガイド 日本語版 : モデル
(前回と前々回の記事は若干古いドキュメントを参照していた。。)
…
ていうか、最近のフレームワークってどれもRailsっぽく見えてしまうなぁ。
CodeIgniter はドキュメントが丁寧に書かれていて(かつ日本語訳もされていて)非常に助かるなぁ。
ドキュメント重要ですねー。
追記:
えーっと、実は上記のモデル(Blog_model)の使用例はあんまり適切じゃないんですよねー。
なんでかっていうと、本来 blog テーブルからデータを取ってくる云々っていうのは Blog_model の内部でやるべきなんです。
それをコントローラー側でやってて、なんかモデルの意味無い!みたいな感じに上記の例ではなってます。
というわけでもうちょっと勉強します。
追記:
よくよく考えると、上の例の blogs テーブルとか blog_model とかっていうネーミングは変だ。
entries とか entry_model だよね普通。




