Zend_Db_Table_Definition.xml 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <!-- EN-Revision: 24249 -->
  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. 拡張した <classname>Zend_Db_Table_Abstract</classname> クラスを設定するとき、
  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. ご覧の通り、通常、拡張した <classname>Zend_Db_Table_Abstract</classname> クラスで出会うであろう
  70. オプションは、同様にこの配列で文書化されます。
  71. <classname>Zend_Db_Table</classname> コンストラクタに渡されるとき、
  72. この定義は適切な列を返すために作成する必要がある
  73. どんなテーブルにでも<emphasis>残存します</emphasis>。
  74. </para>
  75. <para>
  76. 下記は、
  77. 上述のデータモデルと一致する<methodname>findDependentRowset()</methodname>と
  78. <methodname>findManyToManyRowset()</methodname>呼び出しと同様に、
  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
  88. . ': '
  89. . $author->first_name
  90. . ' '
  91. . $author->last_name
  92. . PHP_EOL;
  93. $books = $author->findDependentRowset('book');
  94. foreach ($books as $book) {
  95. echo ' Book: ' . $book->title . PHP_EOL;
  96. $genreOutputArray = array();
  97. $genres = $book->findManyToManyRowset('genre', 'book_to_genre');
  98. foreach ($genres as $genreRow) {
  99. $genreOutputArray[] = $genreRow->name;
  100. }
  101. echo ' Genre: ' . implode(', ', $genreOutputArray) . PHP_EOL;
  102. }
  103. }
  104. ]]></programlisting>
  105. </example>
  106. </sect2>
  107. <sect2 id="zend.db.table.definition.advanced-usage">
  108. <title>高度な利用法</title>
  109. <para>
  110. 時々、テーブル・ゲートウェイの定義、
  111. 及び利用の両方のパラダイムを使うことを望みます:
  112. 拡張と具象のインスタンス化の両方によって。
  113. こうするために、定義外のどんなテーブル構成をも単純に無視してください。
  114. これで、Zend_Db_Tableが定義キーの代わりに実際の参照されたクラスを探すことができます。
  115. </para>
  116. <para>
  117. 上記の例をもとに、
  118. テーブル構成のうちの1つはZend_Db_Table_Abstractを拡張したクラスであることができます。
  119. その一方で、残りのテーブルは定義の一部として保ちます。
  120. この新しい定義とどのように相互作用するかも示します。
  121. </para>
  122. <example id="zend.db.table.definition.example3">
  123. <title>Zend_Db_Table定義の混合利用との相互作用</title>
  124. <programlisting language="php"><![CDATA[
  125. class MyBook extends Zend_Db_Table_Abstract
  126. {
  127. protected $_name = 'book';
  128. protected $_referenceMap = array(
  129. 'author' => array(
  130. 'columns' => 'author_id',
  131. 'refTableClass' => 'author',
  132. 'refColumns' => 'id'
  133. )
  134. );
  135. }
  136. $definition = new Zend_Db_Table_Definition(array(
  137. 'author' => array(
  138. 'name' => 'author',
  139. 'dependentTables' => array('MyBook')
  140. ),
  141. 'genre' => null,
  142. 'book_to_genre' => array(
  143. 'referenceMap' => array(
  144. 'book' => array(
  145. 'columns' => 'book_id',
  146. 'refTableClass' => 'MyBook',
  147. 'refColumns' => 'id'
  148. ),
  149. 'genre' => array(
  150. 'columns' => 'genre_id',
  151. 'refTableClass' => 'genre',
  152. 'refColumns' => 'id'
  153. )
  154. )
  155. )
  156. ));
  157. $authorTable = new Zend_Db_Table('author', $definition);
  158. $authors = $authorTable->fetchAll();
  159. foreach ($authors as $author) {
  160. echo $author->id
  161. . ': '
  162. . $author->first_name
  163. . ' '
  164. . $author->last_name
  165. . PHP_EOL;
  166. $books = $author->findDependentRowset(new MyBook());
  167. foreach ($books as $book) {
  168. echo ' Book: ' . $book->title . PHP_EOL;
  169. $genreOutputArray = array();
  170. $genres = $book->findManyToManyRowset('genre', 'book_to_genre');
  171. foreach ($genres as $genreRow) {
  172. $genreOutputArray[] = $genreRow->name;
  173. }
  174. echo ' Genre: ' . implode(', ', $genreOutputArray) . PHP_EOL;
  175. }
  176. }
  177. ]]></programlisting>
  178. </example>
  179. </sect2>
  180. </sect1>