モデル
データベースのテーブルをモデルによって簡単に操作します。
モデルの作成
以下が最小構成のモデルです。「テーブル名.php」で作成し、テーブル名の一文字目を大文字にして以下を小文字にし、Cをつけたものをクラス名とします。
| user.php |
<?php
class CUser extends CModel
{
}
?>
|
モデルの登録
フレームワークから呼ばれるconfig_models関数内でモデルを登録します。
| config.php |
function config_database( &$db )
{
$db->add("", "localhost", "user", "password", "dbname");
$db->add("special", "192.168.0.100", "user", "password", "dbname");
$db->add("pg","localhost","user","password","dbname",DBKIND_PGSQL,'5432');
}
|
function config_models( &$controller )
{
$controller->AddModel( "user.php" );
$controller->AddModel( "specialuser.php", "special" );
$controller->AddModel( "test.php", "pg" );
}
|
使用方法
モデルはコントローラにて呼び出します。呼び出し方は以下の二つの方法があります。上の方法はコントローラのメンバ変数と競合しない場合のみ設定されています。
$c->user->function();
$c->m["user"]->function();
|
引数に使用するcondition
いくつかのメソッドの引数にconditionがありますが、文字列によるSQLの記述の他に、変数による指定も出来ます。今のところ、結合は全てANDです。これを使った場合、valueは自動的にエスケープされます。例えば以下の例はどちらも同じ機能になります。
$c->user->find("id=1");
$c->user->find(array('id' => 1));
|
関数
- array find( [ mixed condition [, string order [, string limit [, string
group]]] )
テーブルの中から指定されたものを配列として取得します。
$results = $c->user->find( "id=$id", "age DESC" );
|
- array findone( [ string condition [, string order ]] )
テーブルの中からconditionとorderで指定されたものを先頭の一つだけ取得します。
$result = $c->user->findone( "id=$id", "age DESC" );
|
- array findquery( string query [, string condition [, string order [, string
limit [, string group ]]]] )
リレーションを使用したい場合はこちらを利用します。適合したレコードを配列にして取得します。queryにはWHEREより前のクエリ文を指定します。
$query = "SELECT user.*, office.name FROM user"
. " LEFT JOIN user.office_id=office.id";
$results = $c->user->findquery( $query, "age=24", "age DESC" );
|
- int getcount( [ string condition [, string limit ]] )
テーブルの中のconditionとlimitで当てはまる要素の数を取得します。
$count = $c->user->getcount( "id=$id", "10" );
|
- bool insert( array datas )
キーに要素名を指定して値を入れた配列を指定すると、その通りにINSERTを行います。
$data["name"] = $name;
$data["email"] = $email;
$c->user->insert( $data );
|
- bool update( array datas )
キーに要素名を指定して値を入れた配列を指定すると、その通りにUPDATEを行います。
モデルのメンバ変数$id(デフォルトは"id")と同じキーを見つけ、自動的にその場所をUPDATEします。
$idが見つからなかった場合はfalseを返し処理を中止します。
$data["id"] = $id;
$data["name"] = $name;
$data["email"] = $email;
$c->user->update( $data );
|
- bool updateby( array datas, string condition )
updateの様に自動的に条件を指定するのではなく、明示的にconditionで条件を指定できます。
$data["name"] = $name;
$data["email"] = $email;
$c->user->updateby( $data, "age=25" );
|
- bool del( string condition )
conditionで指定されたレコードを削除します。
$c->user->del( "age=25" );
|
- result query( string query )
直接sqlにクエリを送信します。テーブル名は自動的には設定されませんので完全なクエリを指定します。
最後に挿入したIDを返します。(mysqlのみ)
SQLで影響を受けた行の数を返します。
最後に得たエラーを返します。
- string to_datetime( int time )
指定されたUNIXタイムスタンプをDATETIMEの様式にフォーマットします。
(例:2006-09-19 12:24:46)
- string escape( string str )
文字列をクエリ用にエスケープします。
- bool validate( array datas )
- string validatemsg( array datas )
- array GetValidateError()
これらはバリデート用関数です。詳しくは
バリデートのマニュアルをご覧下さい。
変数
$idで指定された値(デフォルト:"id")でテーブルの主要な要素を指定します。update関数などで使用されます。
$nameで指定された(デフォルト:"")データベース接続を使用してクエリを実行します。
var $table
何も指定されていない時(デフォルト)はファイル名のデータベースを自動的に指定します。
これを設定すると、指定されたテーブルにアクセスするようになります。
var $controller
コントローラを参照できます。
|