Structures_DataGrid_DataSource_DBTable
Описание
This class is a data source driver for the PEAR::DB_Table object
Supported operations modes
This driver supports the following operation modes:
Mode | Supported? |
---|---|
Multiple field sorting | yes |
Insert, update and delete records | yes |
Options
This driver accepts the following options:
Option | Type | Описание | Default Value |
---|---|---|---|
fields | array | Which data fields to fetch from the datasource. An empty array means: all fields. Form: array(field1, field2, ...) | array() |
generate_columns | bool | Generate Structures_DataGrid_Column objects with labels. See the 'labels' option. DEPRECATED: use Structures_DataGrid::generateColumns() instead | false |
labels | array | Data field to column label mapping. Only used when 'generate_columns' is true. Form: array(field => label, ...) DEPRECATED: use Structures_DataGrid::generateColumns() instead | array() |
params | array | Placeholder parameters for prepare/execute | array() |
primaryKey | array | Name(s), or numerical index(es) of the field(s) which contain a unique record identifier (only use several fields in case of a multiple-fields primary key) | null |
view | string | The view from $sql array in your DB_Table object. This option is required. | null |
where | string | A where clause for the SQL query. | null |
General notes
If you use aliases in the select part of your view, the count() method from DB_Table and, therefore, $datagrid->getRecordCount() might return a wrong result. To avoid this, DB_Table uses a special query for counting if it is given via a view that needs to be named as '__count_' followed by the name of the view that this counting view belongs to. (For example: if you have a view named 'all', the counting view needs to be named as '__count_all'.)
To use update() and delete() methods, it is required that the indexes are properly defined in the $idx array in your DB_Table subclass. If you have, for example, created your database table yourself and did not setup the $idx array, you can use the 'primaryKey' option to define the primary key field.
Examples
Bind a DB_Table class to Structures_DataGrid
<?php
// basic guestbook class that extends DB_Table
class GuestBook_Table extends DB_Table
{
var $col = array(
// unique row ID
'id' => array(
'type' => 'integer',
'require' => true
),
// first name
'fname' => array(
'type' => 'varchar',
'size' => 32
),
// last name
'lname' => array(
'type' => 'varchar',
'size' => 64
),
// email address
'email' => array(
'type' => 'varchar',
'size' => 128,
'require' => true
),
// date signed
'signdate' => array(
'type' => 'date',
'require' => true
)
);
var $idx = array(); // indices don't matter here
var $sql = array(
// multiple rows for a list
'list' => array(
'select' => 'id, signdate, CONCAT(fname, " ", lname) AS fullname',
'order' => 'signdate DESC'
)
);
}
// instantiate the extended DB_Table class
// (using an existing database connection and the table name 'guestbook')
$guestbook =& new GuestBook_Table($db, 'guestbook');
// Options for the bind() call
// (using the predefined query 'list' from the $sql array and a where
// condition)
$options = array('view' => 'list', 'where' => 'YEAR(signdate) = 2100');
// bind the guestbook object
// (if you don't generate any column yourself before rendering, three
// columns will be generated: id, signdate, fullname)
$test = $datagrid->bind($guestbook, $options);
// print binding error if any
if (PEAR::isError($test)) {
echo $test->getMessage();
}
?>