Zend_Db_Table_Definition.xml 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <!-- EN-Revision: 16943 -->
  4. <sect1 id="zend.db.table.definition">
  5. <title>Zend_Db_Table_Definition</title>
  6. <sect2 id="zend.db.table.definition.introduction">
  7. <title>導入</title>
  8. <para>
  9. <classname>Zend_Db_Table_Definition</classname>は、
  10. 具象のインスタンス化を通じて<classname>Zend_Db_Table</classname>を使うときに、
  11. 使う必要のある、
  12. 関連を記述するために利用できるクラスと構成オプションです。
  13. </para>
  14. </sect2>
  15. <sect2 id="zend.db.table.definition.usage">
  16. <title>基本的な利用法</title>
  17. <para>
  18. 拡張したZend_Db_Table_Abstractクラスを設定するとき、
  19. 利用できる同様なオプションの全てに対して、
  20. 定義ファイルを記述すると、
  21. それらのオプションも利用できます。
  22. 上述の定義でテーブル全ての完全な定義を知ることができるように、
  23. この定義ファイルはインスタンス化の際のクラスに渡すべきです。
  24. </para>
  25. <para>
  26. 下記は、テーブル名とテーブル・オブジェクトの関連を記述する定義です。
  27. 注:
  28. 'name' が定義から省略されると、
  29. 定義済みのテーブルのキーとして管理されます。
  30. (この例は、下記の例の 'genre' 節です。)
  31. </para>
  32. <example id="zend.db.table.definition.example1">
  33. <title>データベース・データモデルの定義を記述</title>
  34. <programlisting language="php"><![CDATA[
  35. $definition = new Zend_Db_Table_Definition(array(
  36. 'author' => array(
  37. 'name' => 'author',
  38. 'dependentTables' => array('book')
  39. ),
  40. 'book' => array(
  41. 'name' => 'book',
  42. 'referenceMap' => array(
  43. 'author' => array(
  44. 'columns' => 'author_id',
  45. 'refTableClass' => 'author',
  46. 'refColumns' => 'id'
  47. )
  48. )
  49. ),
  50. 'genre' => null,
  51. 'book_to_genre' => array(
  52. 'referenceMap' => array(
  53. 'book' => array(
  54. 'columns' => 'book_id',
  55. 'refTableClass' => 'book',
  56. 'refColumns' => 'id'
  57. ),
  58. 'genre' => array(
  59. 'columns' => 'genre_id',
  60. 'refTableClass' => 'genre',
  61. 'refColumns' => 'id'
  62. )
  63. )
  64. )
  65. ));
  66. ]]></programlisting>
  67. </example>
  68. <para>
  69. ご覧の通り、通常、拡張したZend_Db_Table_Abstractクラスで出会うであろう
  70. オプションは、同様にこの配列で文書化されます。
  71. Zend_Db_Tableコンストラクタに渡されるとき、
  72. この定義は適切な列を返すために作成する必要がある
  73. どんなテーブルにでも<emphasis>残存します</emphasis>。
  74. </para>
  75. <para>
  76. 下記は、
  77. 上述のデータモデルと一致するfindDependentRowset()と
  78. findManyToManyRowset()呼び出しと同様に、
  79. プライマリ・テーブル・インスタンス化の例です:
  80. </para>
  81. <example id="zend.db.table.definition.example2">
  82. <title>記述された定義との相互作用</title>
  83. <programlisting language="php"><![CDATA[
  84. $authorTable = new Zend_Db_Table('author', $definition);
  85. $authors = $authorTable->fetchAll();
  86. foreach ($authors as $author) {
  87. echo $author->id . ': ' . $author->first_name . ' ' . $author->last_name . PHP_EOL;
  88. $books = $author->findDependentRowset('book');
  89. foreach ($books as $book) {
  90. echo ' Book: ' . $book->title . PHP_EOL;
  91. $genreOutputArray = array();
  92. foreach ($book->findManyToManyRowset('genre', 'book_to_genre') as $genreRow) {
  93. $genreOutputArray[] = $genreRow->name;
  94. }
  95. echo ' Genre: ' . implode(', ', $genreOutputArray) . PHP_EOL;
  96. }
  97. }
  98. ]]></programlisting>
  99. </example>
  100. </sect2>
  101. <sect2 id="zend.db.table.definition.advanced-usage">
  102. <title>高度な利用法</title>
  103. <para>
  104. 時々、テーブル・ゲートウェイの定義、
  105. 及び利用の両方のパラダイムを使うことを望みます:
  106. 拡張と具象のインスタンス化の両方によって。
  107. こうするために、定義外のどんなテーブル構成をも単純に無視してください。
  108. これで、Zend_Db_Tableが定義キーの代わりに実際の参照されたクラスを探すことができます。
  109. </para>
  110. <para>
  111. 上記の例をもとに、
  112. テーブル構成のうちの1つはZend_Db_Table_Abstractを拡張したクラスであることができます。
  113. その一方で、残りのテーブルは定義の一部として保ちます。
  114. この新しい定義とどのように相互作用するかも示します。
  115. </para>
  116. <example id="zend.db.table.definition.example3">
  117. <title>Zend_Db_Table定義の混合利用との相互作用</title>
  118. <programlisting language="php"><![CDATA[
  119. class MyBook extends Zend_Db_Table_Abstract
  120. {
  121. protected $_name = 'book';
  122. protected $_referenceMap = array(
  123. 'author' => array(
  124. 'columns' => 'author_id',
  125. 'refTableClass' => 'author',
  126. 'refColumns' => 'id'
  127. )
  128. );
  129. }
  130. $definition = new Zend_Db_Table_Definition(array(
  131. 'author' => array(
  132. 'name' => 'author',
  133. 'dependentTables' => array('MyBook')
  134. ),
  135. 'genre' => null,
  136. 'book_to_genre' => array(
  137. 'referenceMap' => array(
  138. 'book' => array(
  139. 'columns' => 'book_id',
  140. 'refTableClass' => 'MyBook',
  141. 'refColumns' => 'id'
  142. ),
  143. 'genre' => array(
  144. 'columns' => 'genre_id',
  145. 'refTableClass' => 'genre',
  146. 'refColumns' => 'id'
  147. )
  148. )
  149. )
  150. ));
  151. $authorTable = new Zend_Db_Table('author', $definition);
  152. $authors = $authorTable->fetchAll();
  153. foreach ($authors as $author) {
  154. echo $author->id . ': ' . $author->first_name . ' ' . $author->last_name . PHP_EOL;
  155. $books = $author->findDependentRowset(new MyBook());
  156. foreach ($books as $book) {
  157. echo ' Book: ' . $book->title . PHP_EOL;
  158. $genreOutputArray = array();
  159. foreach ($book->findManyToManyRowset('genre', 'book_to_genre') as $genreRow) {
  160. $genreOutputArray[] = $genreRow->name;
  161. }
  162. echo ' Genre: ' . implode(', ', $genreOutputArray) . PHP_EOL;
  163. }
  164. }
  165. ]]></programlisting>
  166. </example>
  167. </sect2>
  168. </sect1>