BEARは独自のデータベースクラスライブラリを持ちません。
汎用のライブラリを選択して利用しますが、PEAR::MDB2 をBEARで使いやすいようにBEAR_Mdb2クラスにDBページャーソートの機能を簡単に実現できる専用のクエリーツールクラスBEAR_Query
が用意されています。
キー | 型 | 意味 | 必須? |
---|---|---|---|
db | MDB2 | MDB2オブジェクト | Y |
ro | BEAR_Ro | リソースオブジェクト | Y |
table | string | テーブル名 | Y |
pager | int | ページング※1 | Y |
perPage | int | ページ毎のアイテム数 | |
offset | int | オフセット | |
options | array | DBページャーリンクオプション※2 | |
deleted_at | bool | 論理削除対応 | |
sort | array | ソートオプション※3 |
- ※1 perPageが0より大きいとき機能します。0だとperPageで指定したLIMIT文、1だとDBページングでselectされます。
- ※2 ページャーリンクのオプションです。PEAR::Pagerと同じです。
WHERE deleted_at IS NULL
を付加し、論理削除に対応します。- ※3 URLのクエリーに対応してDBでソートを行います。詳細は以下
pager(DBページャー)とsortオプションはページやリソースでの記述なしに、クエリーに応じてリソース表現がかわるオプションです。
pager = 1, perPage > 0オプションではDBページングが行われ、ページャーリンクが{$pager.links}、ページャー情報が{$pager.info}にアサインされます。
sortオプションはソート可能なキー名を指定するとそのキーに応じたクエリーが行われる機能です。複数指定もでき、URLではカンマでくぎります。降順にするにはキーの前にマイナスをつけます。
URL例
?_sort=id,-date,age&type=bear
キーはDBカラム名そのままか、カラム名を表に出したくない時に代替のキーを指定します。
$id = array($privateColumn, $publicGet, $dir);
などと3つの配列で指定します。
$privateColumn | string | DBカラム名 | |
---|---|---|---|
$publicGet | string | $_GET クエリーキー |
|
$dir | string | 降順昇順 | '+'または'-' |
$id = array('id', 'id', '+');
$date = array('created_at', 'date', '-');
$this->_queryConfig['sort'] = array($id, $date); // ソート
$_GET
クエリーに$publicGetが存在すればその方向でソートされます。-クエリーキーの前にがついていれば降順です。
?_sort=-id
複数のソートはカンマで区切ります。
?_sort=id,-date
DBのカラム名と違うキーでソートを行う場合には$publicGetKeyにcolumnNameと違う名前をつけます。$dirは+は昇順、-は降順です。
PEAR::MDB2利用は必須ではありません、パフォーマンスや要求に応じてライブラリを選択できます。※他のほとんどのBEARのクラスと同様にDBクラスとBEARは密結合していません。
PEAR系
- MDB2
- MDB_QueryTool
- DB_DataObject PHP純正
- PDO
- PHP::mysqli その他
- Zend_Db
- docotrin
- ADOdb
BEARはデータベースに特別なコラム名を利用することはありませんが、標準的な規則を以下に示します。
id | int | プライマリーキー |
---|---|---|
created_at | datetime | 作成日時 |
updated_at | datetime | 変更日時 |
deleted_at | datetime | 削除日時 |
is_XXX | tinyint | bool型 |
- idはint型
- 作成日時はcreated_atフィールドにdatetime型
- 更新日時はupdated_atフィールドにdatetime型
- 有効無効は削除日時とかねてdeleted_atフィールドにdatetime型
論理削除は以下のように削除日時がNULLかどうか調べます。
WHERE users.deleted_at IS NULL
予約削除は以下のようにします。
WHERE users.deleted_at IS NULL OR users.deleted_at > '2009-08-01 00:00:00'
現在日時は_BEAR_DATETIME_
がそのまま使えます。
リクエストで時間を合わせることができます。