Structures_DataGrid_DataSource_DBTable

Structures_DataGrid_DataSource_DBTable -- PEAR::DB_Table データソースドライバ

説明

このクラスは、PEAR::DB_Table オブジェクト用のデータソースドライバです。

サポートする操作モード

このドライバは次の操作モードをサポートしています。

表 62-1このドライバがサポートする操作モード

モードサポートしている?
複数フィールドによる並べ替えyes
レコードの追加、更新および削除yes

オプション

このドライバは、以下のオプションを受け付けます。

表 62-2このドライバのオプション

オプション説明デフォルト値
fieldsarray データソースからどのフィールドを取得するか。空の配列を指定すると、 すべてのフィールドを取得します。 array(field1, field2, ...) 形式となります。 array()
generate_columnsbool ラベルつきの Structures_DataGrid_Column オブジェクトを作成します。 'labels' オプションを参照ください。 非推奨: 代わりに Structures_DataGrid::generateColumns() を使用してください。 false
labelsarray データフィールドとラベルの対応。 'generate_columns' が true の場合にのみ使用します。 array(field => label, ...) 形式となります。 非推奨: 代わりに Structures_DataGrid::generateColumns() を使用してください。 array()
paramsarrayprepare/execute 用のプレースホルダのパラメータ。array()
primaryKeyarray レコードを一意に決定する識別子を含むフィールドの名前、 あるいは数値インデックス (複数のフィールドを指定するのは、 複合主キーの場合のみです)。 null
viewstring DB_Table オブジェクト内の $sql 配列からのビュー。このオプションは必須です。 null
wherestringSQL クエリの where 句。null

全般的な注意

ビューの select 部でエイリアスを使用する場合、DB_Table の count() メソッドが間違った結果を返すことがあります。そのため、 $datagrid->getRecordCount() も間違った結果を返すことがあります。 これを避けるため、DB_Table では件数取得用の特別なクエリを使用します。 これは、件数を取得したいビューの名前の前に '__count_' をつけた名前となります (例えば、'all' というビューがある場合、件数取得用のビューは '__count_all' という名前でなければなりません)。

update() メソッドおよび delete() メソッドを使用するには、 DB_Table のサブクラスで配列 $idx が適切に定義されていなければなりません。 たとえばデータベースのテーブルを自分で作成した場合などで $idx を設定していない場合は、オプション 'primaryKey' を使用して主キーフィールドを定義することができます。

例 62-1DB_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(); 
}
?>