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

{
 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中使用migrations管理数据迁移

 

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来查看更多的用法

相关文章: