このクラスは、PEAR::DB_Table オブジェクト用のデータソースドライバです。
このドライバは次の操作モードをサポートしています。
モード | サポートしている? |
---|---|
複数フィールドによる並べ替え | yes |
レコードの追加、更新および削除 | yes |
このドライバは、以下のオプションを受け付けます。
オプション | 型 | 説明 | デフォルト値 |
---|---|---|---|
fields | array | データソースからどのフィールドを取得するか。空の配列を指定すると、 すべてのフィールドを取得します。 array(field1, field2, ...) 形式となります。 | array() |
generate_columns | bool | ラベルつきの Structures_DataGrid_Column オブジェクトを作成します。 'labels' オプションを参照ください。 非推奨: 代わりに Structures_DataGrid::generateColumns() を使用してください。 | false |
labels | array | データフィールドとラベルの対応。 'generate_columns' が true の場合にのみ使用します。 array(field => label, ...) 形式となります。 非推奨: 代わりに Structures_DataGrid::generateColumns() を使用してください。 | array() |
params | array | prepare/execute 用のプレースホルダのパラメータ。 | array() |
primaryKey | array | レコードを一意に決定する識別子を含むフィールドの名前、 あるいは数値インデックス (複数のフィールドを指定するのは、 複合主キーの場合のみです)。 | null |
view | string | DB_Table オブジェクト内の $sql 配列からのビュー。このオプションは必須です。 | null |
where | string | SQL クエリの where 句。 | null |
ビューの select 部でエイリアスを使用する場合、DB_Table の count() メソッドが間違った結果を返すことがあります。そのため、 $datagrid->getRecordCount() も間違った結果を返すことがあります。 これを避けるため、DB_Table では件数取得用の特別なクエリを使用します。 これは、件数を取得したいビューの名前の前に '__count_' をつけた名前となります (例えば、'all' というビューがある場合、件数取得用のビューは '__count_all' という名前でなければなりません)。
update() メソッドおよび delete() メソッドを使用するには、 DB_Table のサブクラスで配列 $idx が適切に定義されていなければなりません。 たとえばデータベースのテーブルを自分で作成した場合などで $idx を設定していない場合は、オプション 'primaryKey' を使用して主キーフィールドを定義することができます。
DB_Table クラスを Structures_DataGrid にバインドする
<?php
// DB_Table を継承した、基本的な guestbook クラス
class GuestBook_Table extends DB_Table
{
var $col = array(
// 一意な行 ID
'id' => array(
'type' => 'integer',
'require' => true
),
// 名
'fname' => array(
'type' => 'varchar',
'size' => 32
),
// 姓
'lname' => array(
'type' => 'varchar',
'size' => 64
),
// メールアドレス
'email' => array(
'type' => 'varchar',
'size' => 128,
'require' => true
),
// 登録日
'signdate' => array(
'type' => 'date',
'require' => true
)
);
var $idx = array(); // インデックスは今回は気にしません
var $sql = array(
// リストに表示する行
'list' => array(
'select' => 'id, signdate, CONCAT(fname, " ", lname) AS fullname',
'order' => 'signdate DESC'
)
);
}
// DB_Table を継承したクラスのインスタンスを作成します
// (既存のデータベース接続を用い、テーブル名は 'guestbook' となります)
$guestbook =& new GuestBook_Table($db, 'guestbook');
// bind() 用のオプションを設定します
// ($sql 配列の定義済みクエリ 'list' と where 条件を使用します)
$options = array('view' => 'list', 'where' => 'YEAR(signdate) = 2100');
// guestbook オブジェクトをバインドします
// (レンダリングの前にカラムを作成していない場合は、
// id, signdate, fullname の 3 つのカラムが生成されます)
$test = $datagrid->bind($guestbook, $options);
// バインド時にエラーが発生したら、それを表示します
if (PEAR::isError($test)) {
echo $test->getMessage();
}
?>