2009/10/28 水曜日

Zend Frameworkで多対多のテーブルをMyISAMなどリレーション無しで扱う場合

Filed under: さくらインターネット, Zend Framework — ne-zu @ 16:25:55 このエントリをはてなブックマークに追加

Zend Frameworkで多対多のテーブルをリレーション無しで扱う。:: PHPの種 ブログ

つまり強制MyISAMのさくらレンサバでは。。
$_dependentTablesを指定しましょう。

で、ある程度Zend_Db_Tableで保管ができるので、それを利用させてもらいましょう。

PHP:
  1. class BugsProducts extends Zend_Db_Table_Abstract
  2. {
  3.     protected $_name = 'BugsProducts';
  4.     protected $_referenceMap    = array(
  5.         'Bug' => array(
  6.             'columns'         => 'bug_id',
  7.             'refTableClass'  => 'Bugs',
  8.             'refColumns'        => 'id',
  9.             'onDelete'          => self::CASCADE,
  10.             'onUpdate'          => self::CASCADE
  11.         ),
  12.         'Product' => array(
  13.             'columns'         => 'product_id',
  14.             'refTableClass'  => 'Products',
  15.             'refColumns'        => 'id',
  16.             'onDelete'          => self::CASCADE,
  17.             'onUpdate'          => self::CASCADE
  18.         )
  19.     );
  20. }

んで、リファレンスを貼られたほうのテーブルで

PHP:
  1. class Products extends Zend_Db_Table_Abstract
  2. {
  3.     protected $_name            = 'products';
  4.     protected $_dependentTables = array('BugsProducts');
  5. }

DependetTablesをクラス名で指定しておきます。

これでDeleteがCascadeされたりなど、Zend_Db_Table側でリレーションを保管してくれます。
そもそもInnoDBが使えればいいんですけどねえ。。

関連する記事:

Powered by

コメント (0) »

この記事にはまだコメントがついていません。

コメント RSS トラックバック URL

コメントをどうぞ

Powered by PHP-SeeD and WordPress ME