July 25, 2008

CodeIgniter のモデル

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 だよね普通。

No Comments »

TrackBack URI

Leave a comment

※上の項目は入力してもしなくてもよいです。