「ちいたん」はインクルードするだけで使えるお手軽PHPフレームワークです。「ちいたん」には、シンプルなモデルクラスが用意されています。CakePHPのように関連テーブルからもデータを引っ張ってくる機能はデフォルトでは付いていませんので、複雑な呼び出しにはSQLの知識が必要になりますが、「簡単な呼び出しはモデル関数で」「複雑な呼び出しはSQL文で」と使い分けができて非常にすっきりしたコードが書けます
まず先に、データベースの設定をしておきます。
次にテーブルの設定です。例として「ブログシステム」のテーブル構成を想定して、記事リストを表示するまでの流れを見てみましょう。
entryクラスは entry.php という名前で以下のように作成して、適当な場所に保存します。クラス名は entry の頭文字を大文字にして、先頭にCを付けた CEntry になります。
find で取得した配列の中身は例えば、こんなふうになります。
array find($condition,$order,$limit,$group)
データベースの設定
ちいたんスタートアップ にも書いたように、設定ファイルを用意してデータベースの設定を記述します。//config.php function config_database(&$db){ $db->add("","localhost","user","pass","db_name"); }複数データベースを利用する場合は、第一引数に設定名を入れておきます。
//config.php function config_database(&$db){ $db->add("","localhost","user1","pass1","db_name1"); $db->add("db2","localhost","user2","pass2","db_name2"); }また、データベースの種類やポートを指定する場合は、
//config.php function config_database(&$db){ //MySQL(デフォルト) $db->add("","localhost","user","pass","db_name"); //MySQL, another database $db->add("another","localhost","user2","pass2","db_name2"); //MySQL, port:8889 正式な書き方 $db->add("mysql","localhost","user","pass","db_name",DBKIND_MYSQL,8889); //MySQL, port:8889 これでもいける $db->add("mysql2","localhost:8889","user","pass","db_name"); //PgSQL $db->add("pgsql","localhost","user","pass","db_name",DBKIND_PGSQL); //TextSQL $db->add("textsql","localhost","user","pass","db_name",DBKIND_TEXTSQL); }などとします。
次にテーブルの設定です。例として「ブログシステム」のテーブル構成を想定して、記事リストを表示するまでの流れを見てみましょう。
テーブルの設定
ブログのエントリが、entryというテーブルに入っているとしましょう。このテーブルにアクセスするためにまずやることは「entryクラスを作成」して「ちいたん に登録」する事です。entryクラスは entry.php という名前で以下のように作成して、適当な場所に保存します。クラス名は entry の頭文字を大文字にして、先頭にCを付けた CEntry になります。
//entry.php class CEntry extends CModel{ }次に「ちいたん」への登録です。作成した entry.php を、設定ファイルに書き加えます。
//config.php function config_database(&$db){ $db->add("","localhost","user","pass","db_name"); } function config_models(&$controller){ $controller->AddModel("***/entry.php"); }もし、複数データベースを利用している場合は、データベースの設定名もセットしておきます。
//config.php function config_database(&$db){ $db->add("","localhost","user","pass","db_name"); $db->add("mysql2","localhost","user2","pass2","db_name2"); } function config_models(&$controller){ $controller->AddModel("***/entry.php","mysql2");//mysql2 }
データベースへのアクセス
それではいよいよ、entryテーブルにアクセスしてみます。設定ファイルと「cheetan.php」を読み込んで、処理を action 関数内に記述します。require_once "config.php"; require_once "cheetan/cheetan.php"; function action(&$c) { $entry_list = $c->entry->find("","date desc"); print_r($entry_list); }action は特別な関数です。この関数を定義する事で「ちいたん」のコントローラー $c を取得でき、「ちいたん」の便利な関数やオブジェクト群にアクセスできるようになります。上の例では、コントローラーから entry テーブルのオブジェクトにアクセスし、findでレコードの配列を取得しています。find は、テーブルのレコードを取得するモデル関数です。
find で取得した配列の中身は例えば、こんなふうになります。
Array { [0] => Array ( [id] => 0 [title] => ちいたんスタートアップ [body] => 世界最軽量PHP用MVCフレームワーク「ちいたん」... [date] => 2007-12-27 06:06:07 ) [1] => Array ( [id] => 1 [title] => 「ちいたん」のDBモデルを使う [body] => 「ちいたん」には、シンプルなモデルクラスが... [date] => 2008-03-07 17:44:20 ) }
データをビューに渡す
取得したデータをHTMLに整形して書き出してみます。<? require_once "config.php"; require_once "cheetan/cheetan.php"; function action(&$c) { $entry_list = $c->entry->find("","date desc"); $c->set('entry_list',$entry_list); } $entry_list = $data['entry_list']; ?> <html> <head> <title></title> </head> <body> <? foreach($entry_list as $entry) { echo "<p>"; echo $entry['title']."<br>"; echo $entry['body']."<br>"; echo $entry['date']; echo "</p>"; } ?> </body> </html>実際は action 関数内でスクリプトを完結させる事もできるのですが、ここでは一旦必要なデータをビューに渡しています。
$c->set('entry_list',$entry_list);セットした変数はグローバル変数 $data からアクセスできます。
$entry_list = $data['entry_list'];こうしておくことで、後々ビューの便利な機能(テンプレート機能など)が使えるようになります。
その他のデータ取得関数
「ちいたん」のモデルには、以下ののデータ取得関数が用意されています。array find($condition,$order,$limit,$group)
//レコードリストを取得して、配列で返す find("id=1","date","10"); find("id=1 and cat_id=1","date desc","0,10"); find("title='test'","date desc","0,10","member_id"); *レコードが見つからなかった場合は空の配列が返るarray findone($condition,$order)
//レコードを一つだけ取得し、連想配列として返す。 //内部的には、上の find に limit を付けて渡しています。 findone("id=1"); findone("author='sandman'"); $item = findone("member_id=2 and cat_id=1","date desc"); *レコードが見つからなかった場合はFALSEが返るarray findquery($query,$condition,$order,$limit,$group)
//リレーションを想定したfindで、$query部分にselect〜where以前までを記述 $query = "SELECT entry.*,cat.cat_name from entry"; $query.= " left join cat on entry.cat_id=cat.id"; $list = findquery($query,"entry.author='sandman'","date desc",10); *レコードが見つからなかった場合は空の配列が返るint getcount($condition,$limit)
//条件に合うレコード数を取得 getcount("");//全レコード数 getcount("author='sandman'"); *レコードが見つからなかった場合は0が返るデフォルトで定義されているデータ取得関数は以上です。 あとはテーブル毎に、独自の関数を定義してみましょう。
//entry.php CEntry extends CModel{ function last_entry(){ return $this->findone("","date desc"); } }
2008年03月07日17時44分20秒
カテゴリ: ちいたん
カテゴリ: ちいたん