2012-01-10 5 views
0

Я пишу CDbMigration в Yii, чтобы создать новую таблицу с внешним ключом в существующую таблицу. Это просто. Я также хочу взять каждую запись в старой таблице и скопировать ее идентификатор, миниатюру и мою функцию (заголовок) в новую таблицу, прежде чем отбрасывать миниатюру в старой таблице.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

Yeah 'myfunction' не является MySQL, поэтому я думаю, что это не сработает, я решил вместо этого написать код, который будет выбирать данные, преобразовывать их в PHP и затем вставлять. Все используют построитель запросов Yii. – Matt

Смежные вопросы