Yii DbMigration Перемещение данных в другую таблицу - PullRequest
0 голосов
/ 10 января 2012

Я пишу CDbMigration в Yii, чтобы создать новую таблицу с внешним ключом для существующей таблицы. Это просто. Я также хочу взять каждую запись в старой таблице и скопировать ее идентификатор, миниатюру и myfunction (title) в новую таблицу, прежде чем отбрасывать миниатюру в старой таблице.

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;

Кроме того, myfunction - это функция для преобразования строки.

Теперь я понял, что использование CActiveRecord - это плохая практика в процессе миграции, но мои навыки работы с SQL недостаточно остры, чтобы знать, есть ли команда SQL, которая делает то, что я хочу для миграции. Или это то, в чем я должен отдельно копировать данные в сценарии (т. Е. Не то, для чего я должен использовать миграцию)?

1 Ответ

1 голос
/ 11 января 2012

Вообще говоря, вы можете скопировать данные в другую таблицу, используя INSERT...SELECT; поскольку вы запрашиваете команду SQL, это, вероятно, то, что вы ищете:

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

Однако myfunction должна быть функцией, которую MySql предоставляет, иначе этот запрос (или любой другой подход в чистом SQL) никогда не сможет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...