YII2的migrations目录位于console中, 打开命令行窗口,转到YII框架目录.
1.创建一个新的migrations时间戳文件:
输入: yii migrate/create init-user-table, 然后输入yes确认. 这样在console的migrations目录下就生成了一个新的时间戳文件: m170514_041000_init_user_table.php
use yiidbMigration; class m170514_041000_init_user_table extends Migration { public function up() { } public function down() { echo "m170514_041000_init_user_table cannot be reverted. "; return false; } /* // Use safeUp/safeDown to run migration code within a transaction public function safeUp() { } public function safeDown() { } */ }
2.写入代码, 目的是创建一个user表:
use yiidbMigration; class m170514_041000_init_user_table extends Migration
{
const TBL_NAME = '{{%user}}';
public function safeUp() { $tableOptions = null; if ($this->db->driverName === 'mysql') { $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE=InnoDB'; } $this->createTable(TBL_NAME, [ 'id' => $this->primaryKey(), 'username' => $this->string()->notNull()->unique(), 'auth_key' => $this->string(32)->notNull(), 'password_hash' => $this->string()->notNull(), 'password_reset_token' => $this->string()->unique(), 'email' => $this->string()->notNull()->unique(), 'status' => $this->smallInteger()->notNull()->defaultValue(10), 'created_at' => $this->integer()->notNull(), 'updated_at' => $this->integer()->notNull(), ], $tableOptions); } public function safeDown() { $this->dropTable(TBL_NAME); } }
3.执行migrate:
在命令行中输入: yii migrate 回车, 再输入yes确认, 这样在MySQL数据库中就生成了一个user表;
yii2版本2.07后,增加了更细致的分类,例如我已经创建了admin表,但少了一个status字段,那可以直接用下面命令便会生成只增加字段的文件
yii migrate/create add_column_to_admin --fields=status:int(10):nontNull
<?php use yiidbMigration; class m160501_053640_add_column_to_admin extends Migration { public function up() { $this->addColumn('admin', 'status', $this->int(10)->nontNull()); } public function down() { $this->dropColumn('admin', 'status'); } }
根据migrate/create后面的参数总共匹配这几种样式:
1、create_junction_表名_and_表名,用来创建联结表
2、add_xxx_to_表名,用来增加字段(可以用--fields样式指定一个字段,否则生成空的,需要自己写,当然也可以改模板添加个注释示例)
3、drop_xxx_from_表名,用来删除字段(同上)
4、create_表名,用来创建表
5、drop_表名,用来删除表
注:可以直接在控制台用yii help migrate来查看更多的用法