Zend_Db_Table_Definition(日本語)
導入
Zend_Db_Table_Definitionは、
具象のインスタンス化を通じてZend_Db_Tableを使うときに、
使う必要のある、
関連を記述するために利用できるクラスと構成オプションです。
基本的な利用法
拡張した Zend_Db_Table_Abstract クラスを設定するとき、
利用できる同様なオプションの全てに対して、
定義ファイルを記述すると、
それらのオプションも利用できます。
上述の定義でテーブル全ての完全な定義を知ることができるように、
この定義ファイルはインスタンス化の際のクラスに渡すべきです。
下記は、テーブル名とテーブル・オブジェクトの関連を記述する定義です。
注:
'name' が定義から省略されると、
定義済みのテーブルのキーとして管理されます。
(この例は、下記の例の 'genre' 節です。)
Example #1 データベース・データモデルの定義を記述
$definition = new Zend_Db_Table_Definition (array(
'name' => 'author',
'dependentTables' => array('book')
),
'name' => 'book',
'columns' => 'author_id',
'refTableClass' => 'author',
'refColumns' => 'id'
)
)
),
'genre' => null,
'book_to_genre' => array(
'columns' => 'book_id',
'refTableClass' => 'book',
'refColumns' => 'id'
),
'columns' => 'genre_id',
'refTableClass' => 'genre',
'refColumns' => 'id'
)
)
)
));
ご覧の通り、通常、拡張した Zend_Db_Table_Abstract クラスで出会うであろう
オプションは、同様にこの配列で文書化されます。
Zend_Db_Table コンストラクタに渡されるとき、
この定義は適切な列を返すために作成する必要がある
どんなテーブルにでも残存します。
下記は、
上述のデータモデルと一致する findDependentRowset()と
findManyToManyRowset()呼び出しと同様に、
プライマリ・テーブル・インスタンス化の例です:
$authorTable = new Zend_Db_Table('author', $definition);
$authors = $authorTable->fetchAll();
foreach ($authors as $author) {
. ': '
. $author->first_name
. ' '
. $author->last_name
. PHP_EOL;
$books = $author->findDependentRowset('book');
foreach ($books as $book) {
echo ' Book: ' . $book-> title . PHP_EOL;
$genreOutputArray = array();
$genres = $book->findManyToManyRowset('genre', 'book_to_genre');
foreach ($genres as $genreRow) {
$genreOutputArray[] = $genreRow->name;
}
echo ' Genre: ' . implode(', ', $genreOutputArray) . PHP_EOL;
}
}
高度な利用法
時々、テーブル・ゲートウェイの定義、
及び利用の両方のパラダイムを使うことを望みます:
拡張と具象のインスタンス化の両方によって。
こうするために、定義外のどんなテーブル構成をも単純に無視してください。
これで、Zend_Db_Tableが定義キーの代わりに実際の参照されたクラスを探すことができます。
上記の例をもとに、
テーブル構成のうちの1つはZend_Db_Table_Abstractを拡張したクラスであることができます。
その一方で、残りのテーブルは定義の一部として保ちます。
この新しい定義とどのように相互作用するかも示します。
Example #3 Zend_Db_Table定義の混合利用との相互作用
class MyBook extends Zend_Db_Table_Abstract
{
protected $_name = 'book';
protected $_referenceMap = array(
'columns' => 'author_id',
'refTableClass' => 'author',
'refColumns' => 'id'
)
);
}
$definition = new Zend_Db_Table_Definition (array(
'name' => 'author',
'dependentTables' => array('MyBook')
),
'genre' => null,
'book_to_genre' => array(
'columns' => 'book_id',
'refTableClass' => 'MyBook',
'refColumns' => 'id'
),
'columns' => 'genre_id',
'refTableClass' => 'genre',
'refColumns' => 'id'
)
)
)
));
$authorTable = new Zend_Db_Table('author', $definition);
$authors = $authorTable->fetchAll();
foreach ($authors as $author) {
. ': '
. $author->first_name
. ' '
. $author->last_name
. PHP_EOL;
$books = $author->findDependentRowset(new MyBook());
foreach ($books as $book) {
echo ' Book: ' . $book-> title . PHP_EOL;
$genreOutputArray = array();
$genres = $book->findManyToManyRowset('genre', 'book_to_genre');
foreach ($genres as $genreRow) {
$genreOutputArray[] = $genreRow->name;
}
echo ' Genre: ' . implode(', ', $genreOutputArray) . PHP_EOL;
}
}
|
|