yii2 migration使用

1.通过 yii migrate/create mytable 创建一个类似于 my-yii-advanced-appconsolemigrationsm150427_080248_mytable.php 的文件 内容如下:

(可以使用yii migrate --migrationPath=@yii/rbac/migrations/导入Yii官方提供的权限控制表)

<?php

use yiidbSchema;
use yiidbMigration;

class m150427_080248_mytable extends Migration
{
    public function up()
    {

      $tableOptions = null;
      if ($this->db->driverName === 'mysql') {
        $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB';
      }


      $this->createTable('{{%t_adm_user}}', [
        'id' => Schema::TYPE_PK,
        'username' => Schema::TYPE_STRING . '(64) NOT NULL',
        'password' => Schema::TYPE_STRING . '(64) NOT NULL',
        'userphoto' => Schema::TYPE_STRING . '(64) NOT NULL',
        ], $tableOptions);
      $pw1 = Yii::$app->security->generatePasswordHash('admin');
      $pw2 = Yii::$app->security->generatePasswordHash('demo');
      $sql = "INSERT INTO `t_adm_user` (`id`, `username`, `password`) VALUES
          (1, 'admin', '$pw1'),
          (2, 'demo', '$pw2');";
      $this->execute($sql);

    }

    public function down()
    {
        echo "m150427_080248_mytable cannot be reverted.
";

        return false;
    }
    
    /*
    // Use safeUp/safeDown to run migration code within a transaction
    public function safeUp()
    {
    }
    
    public function safeDown()
    {
    }
    */
}

2.可参考安装yii高级应用模版是自带的my-yii-advanced-appconsolemigrationsm130524_201442_init.php文件进行代码的填写

<?php

use yiidbSchema;
use yiidbMigration;

class m130524_201442_init extends Migration
{
    public function up()
    {
        $tableOptions = null;
        if ($this->db->driverName === 'mysql') {
            // http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci
            $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB';
        }

        $this->createTable('{{%user}}', [
            'id' => Schema::TYPE_PK,
            'username' => Schema::TYPE_STRING . ' NOT NULL',
            'auth_key' => Schema::TYPE_STRING . '(32) NOT NULL',
            'password_hash' => Schema::TYPE_STRING . ' NOT NULL',
            'password_reset_token' => Schema::TYPE_STRING,
            'email' => Schema::TYPE_STRING . ' NOT NULL',

            'status' => Schema::TYPE_SMALLINT . ' NOT NULL DEFAULT 10',
            'created_at' => Schema::TYPE_INTEGER . ' NOT NULL',
            'updated_at' => Schema::TYPE_INTEGER . ' NOT NULL',
        ], $tableOptions);
    }

    public function down()
    {
        $this->dropTable('{{%user}}');
    }
}

对应的mysql字段类型可参考链接:http://www.yiiframework.com/doc-2.0/yii-db-schema.html

3.通过migrate文件生成数据表到数据库使用 yii migrate 命令(要先在配置文件中配置好数据库信息并创建相应的数据库)

由于mytest和mytable都为空,所以只创建了有内容的user表,查看数据库如图:

migration表内容如下:

原文地址:https://www.cnblogs.com/benlightning/p/4460510.html