Structures_DataGrid_DataSource_DBTable
Structures_DataGrid_DataSource_DBTable – PEAR::DB_Table データソースドライバ
説明
このクラスは、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();
}
?>