YII2的migrations目錄位於console中, 打開命令行窗口,轉到YII框架目錄.
1.創建一個新的migrations時間戳文件:
輸入: yii migrate/create init-user-table, 然后輸入yes確認. 這樣在console的migrations目錄下就生成了一個新的時間戳文件: m170514_041000_init_user_table.php
use yii\db\Migration; class m170514_041000_init_user_table extends Migration { public function up() { } public function down() { echo "m170514_041000_init_user_table cannot be reverted.\n"; return false; } /* // Use safeUp/safeDown to run migration code within a transaction public function safeUp() { } public function safeDown() { } */ }
2.寫入代碼, 目的是創建一個user表:
use yii\db\Migration; 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 yii\db\Migration; 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來查看更多的用法