2012-01-10 37 views
0

我正在Yii中编写一个CDbMigration以创建一个具有外键的新表。这很容易。我还希望将旧表格中的每个条目都放在旧表格中,并在将缩略图放入旧表格之前将其ID,缩略图和myfunction(标题)复制到新表格中。Yii DbMigration将数据移动到其他表

迁移之前的OLD_TABLE应该像(截)

CREATE TABLE IF NOT EXISTS `old_table` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `title` varchar(255) NOT NULL, 
    `thumbnail` varchar(64) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

后,我将有一个NEW_TABLE和旧表没有thumbnail

CREATE TABLE IF NOT EXISTS `new_table` (
    `old_id` int(11) unsigned NOT NULL, -- foreign key to old_table 
    `transformed_title` varchar(255) NOT NULL, 
    `thumbnail` varchar(64) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

此外,myfunctionis功能改造一个字符串。

现在我明白了,在迁移过程中使用CActiveRecord是不好的做法,但是我的SQL技能不够清晰,无法知道是否有SQL命令来执行我想要的迁移。或者这是我应该单独在脚本中复制数据的东西(即不是我应该使用迁移的东西)?

回答

1

一般而言,您可以使用INSERT...SELECT将数据复制到另一个表;既然你问了一个SQL命令,这可能是你在找什么:

INSERT INTO new_table (old_id, transformed_title, thumbnail) 
SELECT id, MYFUNCTION(title), thumbnail FROM old_table 

然而,myfunction需要是MySQL的另有规定此查询功能(或纯SQL任何其他方式)将永远不会能工作。

+0

是的'myfunction'不是MySQL的,所以我猜这样做不行,我决定只是写代码来选择数据,然后在PHP中进行转换,然后插入它。全部使用Yii查询生成器。 – Matt 2012-01-11 02:30:54