Инструменты пользователя

Инструменты сайта


dev:php:yii:mnozhestvennye.svjazi.pri.ispolzovanii.mysql.isam

Множественные связи при использовании БД MySQL и таблиц ISAM

В версии >= Yii 1.0.1 можно использовать relations для ISAM без всяких патчей.

Версия Yii 1.0.0.

--- framework\db\schema\mysql\CMysqlSchema.php.orig    2008-12-03 22:52:28.000000000 +0300
+++ framework\db\schema\mysql\CMysqlSchema.php    2008-12-30 22:09:44.000000000 +0300
@@ -162,7 +162,7 @@
      */
     protected function findConstraints($table)
     {
-        $row=$this->getDbConnection()->createCommand('SHOW CREATE TABLE '.$table->rawName)->queryRow();
+        if( ( $row=$this->getDbConnection()->createCommand('SELECT `constraint` FROM `Constraints` WHERE `table`="'.$table->name.'"')->queryRow() ) === false ) return;
         $matches=array();
         $regexp='/FOREIGN KEY\s+\(([^\)]+)\)\s+REFERENCES\s+([^\(^\s]+)\s*\(([^\)]+)\)/mi';
         foreach($row as $sql)

После этого создаём таблицу `Constraints` с двумя полями: `table` как Varchar(100) и `constraint` как Text. Соответственно, для каждой записи в поле `table` заносится имя таблицы для связи, в поле `constraint` строка (или несколько строк, или просто несколько записей разделённых, например, пробелом) создания связи вида:

[CONSTRAINT ]FOREIGN KEY (<локальное_поле>) REFERENCES <удалённая_таблица>(<удалённое_поле>)

Дискуссия

Enter your comment
 
dev/php/yii/mnozhestvennye.svjazi.pri.ispolzovanii.mysql.isam.txt · Последние изменения: 16.11.2009 20:26 (внешнее изменение)

Инструменты страницы