第3弾/mosKingyoyaDBTable

 金魚屋開発支援シリーズ第3弾。

 手抜き屋のためのmosDBTable 拡張コンポーネント

 1.1.0 でまともに動きます。これまでのことは忘れてください。

はじめに

  • 以下あらゆる著作物の利用に関して著作者は一切の責任を負いません。
  • 以下あらゆる著作物の著作権は金魚屋ですが、とりたてて利用に制限はありません。
  • 利用にはHTML とPHP について多少の知識が必要です。
  • ツッコミ大歓迎。
  • 細かいところは解説しません。
  • 設定とか間違えるとエラー吐きます。

NAME

金魚屋 DBTable コンポーネント - com_kingyoya_dbtable

HISTORY

2008-04-08 Version 1.1.0
  • PHP5 でclone() が動かなかったのでcopy() に変更。
  • next() でリストが空になるバグを修正。
2008-04-07 Version 1.0.1

 clone() がおかしかったので修正。

2008-04-07 Version 1.0.0

 公開

動作環境

  • Joomla 1.0.x

目的

  • なんかもー色々めんどくさくなったので、mosDBTable を拡張しちまえってことです。
  • 単純なクエリで複数レコードを取得できるよう拡張
  • JOIN ムリ。Joomla! ですから。

NOTICE

  • 金魚屋開発支援シリーズの抽象MOSクラス(com_kingyoya_dbtable >=.1.1.0) が必要。使いたくない場合はクラスの継承とコンストラクタを修正して利用してください。
  • mosKingyoyaDBTable は引数間違えたり値とり損ねたりするとE_USER_WARNING にエラー吐きます。

USAGE

/**
 * 通常と同様にクラス定義
 */
class mosMyTable extends mosKingyoyaDBTable {

	var $key1;
	var $key2;
	var $key3;

	/**
	 * コンストラクタ
	 * mosKingyoyaAbstract を利用するため、key は自動的に id になる。
	 */
	function mosMyTable(&$db) {
		parent::mosKingyoyaDBTable('#__my_table', $db);
	}

}

/*
 * リストデータを取得
 */
$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()
mosKingyoyaDBTable(string tablename, database &db)

コンストラク

load()
boolean load(int id)
check()
boolean check()
store()
boolean store()
getError()
boolean store()
reset()
boolean store()
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() の結果、取得したレコード数を返す。

hasNext()
boolean hasNext()

擬似Iterator
find() の結果、「次の」データが存在するか。

next()
boolean next()

擬似Iterator
find() の結果、「次の」データを読み込み。
読み込んだデータはそのままオブジェクトのプロパティに設定される。

resetList()
void resetList()

擬似Iterator
ポインタを先頭に戻し、次の next() で最初のデータを読み込むようにする。

copy()
object & copy()

オブジェクトのクローンを返す。

FILES

kingyoya_dbtable.xml

 コンポーネント設定XML

kingyoya_dbtable.class.php

 mosKingyoyaDBTable クラススクリプト

admin.kingyoya_dbtable.php

 管理画面出力スクリプト