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

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

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

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

[php]
class BugsProducts extends Zend_Db_Table_Abstract
{
protected $_name = ‘BugsProducts’;
protected $_referenceMap = array(
‘Bug’ => array(
‘columns’ => ‘bug_id’,
‘refTableClass’ => ‘Bugs’,
‘refColumns’ => ‘id’,
‘onDelete’ => self::CASCADE,
‘onUpdate’ => self::CASCADE
),
‘Product’ => array(
‘columns’ => ‘product_id’,
‘refTableClass’ => ‘Products’,
‘refColumns’ => ‘id’,
‘onDelete’ => self::CASCADE,
‘onUpdate’ => self::CASCADE
)
);
}
[/php]

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

[php]
class Products extends Zend_Db_Table_Abstract
{
protected $_name = ‘products’;
protected $_dependentTables = array(‘BugsProducts’);
}
[/php]

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

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

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください