第5弾/金魚屋DBTable 拡張Mambot
Version 1.1.0 をリリース。
金魚屋開発支援シリーズ第5弾。
手抜き屋のためのmosDBTable 拡張 Mambot。
factory() がおかしかったので修正。
はじめに
NAME
KingyoyaDBTable - 金魚屋 DBTable 拡張Mambot
Latest Version
動作環境
- Joomla 1.0.x
目的
- なんかもー色々めんどくさくなったので、mosDBTable を拡張しちまえってことです。
- 単純なクエリで複数レコードを取得できるよう拡張
- JOIN ムリ。Joomla! ですから。
- com_kingyoya_mosabstract とcom_kingyoyoa_dbtable で提供していたクラスをmosKingyoyaDBTable に統合してmambot で提供。
- ついでにいくつか便利そうな関数を追加。
NOTICE
- 引数間違えたり値とり損ねたりするとE_USER_WARNING にエラー吐きます。
Mambot Name
KingyoyaDBTable
Mambot Group
Kingyoya
USAGE
// mambot 呼び出し $_MAMBOT->loadBotGroup('Kingyoya'); /** * 通常と同様にクラス定義 */ class mosMyTable extends mosKingyoyaDBTable { var $key1; var $key2; var $key3; /** * コンストラクタ * key は自動的に id になる。 */ function mosMyTable(&$db) { parent::mosKingyoyaDBTable('#__my_table', $db); } } global $database; $row = new mosMyComponent($database); $row->key1 = 'hoge'; $row->key2 = 'fuga'; $row->key3 = 'piyo'; $result = $row->store(); if (!$result) { // error } echo "ID: ", $row->id; echo "Created: ", $row->created('Y-m-d H:i:s'); //$created = $row->created(); // int timestamp //echo "Created: ", date('Y-m-d H:i:s', $created), "\n"; echo "Created by ", $row->created_by('name'); //$created_by = $row->created_by(); // object mosUser //echo "Created by {$created_by->name}\n"; $result = $row->load($id); // $result = $row->loadBy('key1', 'hoge'); // key1 の値が'hoge' のデータを読み込む if (!$result) { // error } $row->key1 = 'hoge'; $row->key2 = 'fuga'; $row->key3 = 'piyo'; $result = $row->store(); if (!$result) { // error } echo "Modified: ", $row->modified('Y-m-d H:i:s'); //$modified = $row->modified(); // int timestamp //echo "Modified: ", date('Y-m-d H:i:s', $modified), "\n"; echo "Modified by ", $row->modified_by('name'); //$modified_by = $row->modified_by(); // object mosUser //echo "Modified by {$modified_by->name}\n"; /* * リストデータを取得 */ $row = nwe mosMyTable($database); $row->key2 = 'value2'; // 検索条件。key2 の値が 'value2' のデータを対象 $row->appendOrderBy('key1', false); // key1 で降順に並び替え $row->appendOrderBy('id'); // key1 の後に id で昇順に並び替え $result = $row->find(); // テーブルからデータを検索 if (!$result) { // 検索でエラー $errorMessage = $row->getError(); die($errorMessage); } while ($row->hasNext()) { // 結果をひとつずつ取得 $result = $row->next(); if (!$result) { // 取得に失敗 $errorMessage = $row->getError(); die($errorMessage); } $id = $result->id; // 連番のキー $key1 = $result->key1; $key2 = $result->key2; $key3 = $result->key3; $created = $result->created('Y-m-d H:i:s'); $created_by = $result->created_by('name'); $modified = $result->created_by('Y-m-d H:i:s'); $modified_by = $result->modified_by('name'); } while ($row->next()) { // 結果をひとつずつ取得(簡易版) }
CLASS mosKingyoyaDBTable 概説
load()
boolean load(int id)
id で登録されているデータを読み出して、対応するオブジェクトプロパティに格納する。
loadBy()
boolean loadBy(string key, string value)
key で指定されたプロパティを元に値を読み出す。
check()
boolean check()
store() のための値検証処理を実装する。
store()
boolean store()
対応するDB テーブルに値を保存する。
mosDBTable のstore() と違い、処理の最初にcheck() を呼び出して検証する。
getError()
string getError()
reset()
void reset()
created()
int created()
登録日時をタイムスタンプで返す。
string created(string date_format)
登録日時をdate_format でフォーマットした文字列を返す。
created_by()
mosUser created_by()
登録ユーザ情報を返す。
mixed created_by(string key)
登録ユーザ情報からkey の値を返す。
modified()
int modified()
更新日時をタイムスタンプで返す。
string modified(string date_format)
更新日時をdate_format でフォーマットした文字列を返す。
modified_by()
mosUser modified_by()
更新ユーザ情報を返す。
mixed modified_by(string key)
更新ユーザ情報からkey の値を返す。
find()
boolean find([ int offset [ , int limit ] ])
テーブルのレコードを検索して複数データを取得する。
カラムと連動したプロパティに設定されている値は、そのまま一致の検索条件に利用される。
appendWhere()
boolean appendWhere(string where)
find() のために自前の検索条件を追加する。
プロパティに値があったり複数の検索条件が設定されていれば、それらはすべて AND でつなげてクエリが作成される。
$rows->appendWhere('created <= UNIX_TIMESTAMP()'); $rows->appendWhere('modified >= UNIX_TIMESTAMP()');
上記で下記のSQL
WHERE created <= UNIX_TIMESTAMP() AND modified >= UNIX_TIMESTAMP()
appendWhereLike()
boolean appendWhere(string key, string value)
appendWhere() でLIKE 条件を追加する代替。
appendWhereLike('key1', '%VALUE%')
は
appendWhere("key1 LIKE '%VALUE%')
と同等。
appendOrderBy()
boolean appendOrderBy(string key [, boolean asc = true ])
find() のために並び替え条件を追加する。
asc が真の場合は昇順、偽の場合は降順となる。
複数指定した場合、指定した順がそのまま優先順位となる。
count()
int count()
find() の結果、取得したレコード数を返す。
copy()
object & copy()
オブジェクトのクローンを返す。
static factory()
object factory(database &database, string class)
class のオブジェクトを作成して返す。
object factory(database &database, string class, mixed load_by)
class のオブジェクトを作成して、load_by を引数にload() を呼び出して返す。
mixed factory(database &database, string class, mixed load_by, string get_property)
class のオブジェクトを作成して、load_by を引数にload() を呼び出し、get_property を名前に持つオブジェクトプロパティの値を返す。