| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- Reviewed: no -->
- <!-- EN-Revision: 24249 -->
- <sect1 id="zend.db.table.definition">
- <title>Zend_Db_Table_Definition(日本語)</title>
- <sect2 id="zend.db.table.definition.introduction">
- <title>導入</title>
- <para>
- <classname>Zend_Db_Table_Definition</classname>は、
- 具象のインスタンス化を通じて<classname>Zend_Db_Table</classname>を使うときに、
- 使う必要のある、
- 関連を記述するために利用できるクラスと構成オプションです。
- </para>
- </sect2>
- <sect2 id="zend.db.table.definition.usage">
- <title>基本的な利用法</title>
- <para>
- 拡張した <classname>Zend_Db_Table_Abstract</classname> クラスを設定するとき、
- 利用できる同様なオプションの全てに対して、
- 定義ファイルを記述すると、
- それらのオプションも利用できます。
- 上述の定義でテーブル全ての完全な定義を知ることができるように、
- この定義ファイルはインスタンス化の際のクラスに渡すべきです。
- </para>
- <para>
- 下記は、テーブル名とテーブル・オブジェクトの関連を記述する定義です。
- 注:
- 'name' が定義から省略されると、
- 定義済みのテーブルのキーとして管理されます。
- (この例は、下記の例の 'genre' 節です。)
- </para>
- <example id="zend.db.table.definition.example1">
- <title>データベース・データモデルの定義を記述</title>
- <programlisting language="php"><![CDATA[
- $definition = new Zend_Db_Table_Definition(array(
- 'author' => array(
- 'name' => 'author',
- 'dependentTables' => array('book')
- ),
- 'book' => array(
- 'name' => 'book',
- 'referenceMap' => array(
- 'author' => array(
- 'columns' => 'author_id',
- 'refTableClass' => 'author',
- 'refColumns' => 'id'
- )
- )
- ),
- 'genre' => null,
- 'book_to_genre' => array(
- 'referenceMap' => array(
- 'book' => array(
- 'columns' => 'book_id',
- 'refTableClass' => 'book',
- 'refColumns' => 'id'
- ),
- 'genre' => array(
- 'columns' => 'genre_id',
- 'refTableClass' => 'genre',
- 'refColumns' => 'id'
- )
- )
- )
- ));
- ]]></programlisting>
- </example>
- <para>
- ご覧の通り、通常、拡張した <classname>Zend_Db_Table_Abstract</classname> クラスで出会うであろう
- オプションは、同様にこの配列で文書化されます。
- <classname>Zend_Db_Table</classname> コンストラクタに渡されるとき、
- この定義は適切な列を返すために作成する必要がある
- どんなテーブルにでも<emphasis>残存します</emphasis>。
- </para>
- <para>
- 下記は、
- 上述のデータモデルと一致する<methodname>findDependentRowset()</methodname>と
- <methodname>findManyToManyRowset()</methodname>呼び出しと同様に、
- プライマリ・テーブル・インスタンス化の例です:
- </para>
- <example id="zend.db.table.definition.example2">
- <title>記述された定義との相互作用</title>
- <programlisting language="php"><![CDATA[
- $authorTable = new Zend_Db_Table('author', $definition);
- $authors = $authorTable->fetchAll();
- foreach ($authors as $author) {
- echo $author->id
- . ': '
- . $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;
- }
- }
- ]]></programlisting>
- </example>
- </sect2>
- <sect2 id="zend.db.table.definition.advanced-usage">
- <title>高度な利用法</title>
- <para>
- 時々、テーブル・ゲートウェイの定義、
- 及び利用の両方のパラダイムを使うことを望みます:
- 拡張と具象のインスタンス化の両方によって。
- こうするために、定義外のどんなテーブル構成をも単純に無視してください。
- これで、Zend_Db_Tableが定義キーの代わりに実際の参照されたクラスを探すことができます。
- </para>
- <para>
- 上記の例をもとに、
-
- テーブル構成のうちの1つはZend_Db_Table_Abstractを拡張したクラスであることができます。
- その一方で、残りのテーブルは定義の一部として保ちます。
- この新しい定義とどのように相互作用するかも示します。
- </para>
- <example id="zend.db.table.definition.example3">
- <title>Zend_Db_Table定義の混合利用との相互作用</title>
- <programlisting language="php"><![CDATA[
- class MyBook extends Zend_Db_Table_Abstract
- {
- protected $_name = 'book';
- protected $_referenceMap = array(
- 'author' => array(
- 'columns' => 'author_id',
- 'refTableClass' => 'author',
- 'refColumns' => 'id'
- )
- );
- }
- $definition = new Zend_Db_Table_Definition(array(
- 'author' => array(
- 'name' => 'author',
- 'dependentTables' => array('MyBook')
- ),
- 'genre' => null,
- 'book_to_genre' => array(
- 'referenceMap' => array(
- 'book' => array(
- 'columns' => 'book_id',
- 'refTableClass' => 'MyBook',
- 'refColumns' => 'id'
- ),
- 'genre' => array(
- 'columns' => 'genre_id',
- 'refTableClass' => 'genre',
- 'refColumns' => 'id'
- )
- )
- )
- ));
- $authorTable = new Zend_Db_Table('author', $definition);
- $authors = $authorTable->fetchAll();
- foreach ($authors as $author) {
- echo $author->id
- . ': '
- . $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;
- }
- }
- ]]></programlisting>
- </example>
- </sect2>
- </sect1>
|