「ちいたん」はインクルードするだけで使えるお手軽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秒
カテゴリ: ちいたん
カテゴリ: ちいたん