миграция базы данных в Yii
Для выполнения миграции в Yii Я использовал эти строки
<?php
class m110714_122129_users extends CDbMigration
{
public function up()
{
$this-> createTable('{{users}}',array(
'id' => 'pk',
'username' => 'VARCHAR (80) NOT NULL',
'password' => 'VARCHAR (80) NOT NULL',
'email' => 'VARCHAR (128) NOT NULL',
'activekey' => 'VARCHAR (128) NOT NULL DEFAULT \'\'',
'createtime' => 'INTEGER (10) NOT NULL DEFAULT \'0\' ',
'lastvisit' => 'INTEGER (10) NOT NULL DEFAULT \'0\' ',
'superuser' => 'INTEGER (1) NOT NULL DEFAULT \'0\' ',
'status'=> 'INTEGER (1) NOT NULL DEFAULT \'0\' ',
));
}
public function down()
{
echo "m110714_122129_users does not support migration down.\n";
return false;
}
/*
// Use safeUp/safeDown to do migration with transaction
public function safeUp()
{
}
public function safeDown()
{
}
*/
}
Чтобы получить
CREATE TABLE IF NOT EXISTS `nt_users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL,
`password` varchar(128) NOT NULL,
`email` varchar(128) NOT NULL,
`activkey` varchar(128) NOT NULL DEFAULT '',
`createtime` int(10) NOT NULL DEFAULT '0',
`lastvisit` int(10) NOT NULL DEFAULT '0',
`superuser` int(1) NOT NULL DEFAULT '0',
`status` int(1) NOT NULL DEFAULT '0',
);
Но теперь я хочу внести некоторые изменения, например, сделать уникальный ключ
UNIQUE KEY `username` (`username`),
UNIQUE KEY `email` (`email`),
KEY `status` (`status`),
KEY `superuser` (`superuser`)
Так как же это сделать? Я искал документацию Yii, но ничего не нашел. Так что любая помощь будет высоко оценена..
5
2 answers
Просто укажите их как неассоциативные значения в массиве следующим образом:
$this-> createTable('{{users}}',array(
'id' => 'pk',
'username' => 'VARCHAR (80) NOT NULL',
'password' => 'VARCHAR (80) NOT NULL',
'email' => 'VARCHAR (128) NOT NULL',
'activekey' => 'VARCHAR (128) NOT NULL DEFAULT \'\'',
'createtime' => 'INTEGER (10) NOT NULL DEFAULT \'0\' ',
'lastvisit' => 'INTEGER (10) NOT NULL DEFAULT \'0\' ',
'superuser' => 'INTEGER (1) NOT NULL DEFAULT \'0\' ',
'status'=> 'INTEGER (1) NOT NULL DEFAULT \'0\' ',
'UNIQUE KEY `username` (`username`)',
'UNIQUE KEY `email` (`email`)',
'KEY `status` (`status`)',
'KEY `superuser` (`superuser`)',
));
Таким образом, они будут добавлены в конец инструкции create без каких-либо изменений.
13
Author: ddinchev, 2011-07-14 16:06:26
$this->createTable('{{users}}',
array(
'id' => 'pk',
'username' => 'varchar(80) NOT NULL',
'password' => 'varchar(80) NOT NULL',
'email' => 'varchar(128) NOT NULL',
'activkey' => 'varchar(128) NOT NULL DEFAULT \'\'',
'createtime' => 'integer(10) NOT NULL DEFAULT \'0\'',
'lastvisit' => 'integer(10) NOT NULL DEFAULT \'0\'',
'superuser' => 'integer(1) NOT NULL DEFAULT \'0\'',
'status' => 'integer(1) NOT NULL DEFAULT \'0\'',
),
);
$this->createIndex('username', '{{user}}', 'username', true);
$this->createIndex('email', '{{user}}', 'email', true);
$this->createIndex('superuser', '{{user}}', 'superuser', false);
$this->createIndex('status', '{{user}}', 'status', false);
См. http://www.yiiframework.com/doc/api/1.1/CDbMigration#createIndex-detail для получения более подробной информации.
11
Author: jamband, 2011-10-30 15:16:02