Yii2之数据库迁移(migrate)

关于Yii2的数据迁移,与laravel等其余框架同样,在开发和维护一个数据库驱动的应用程序时,数据库的结构会随代码的改变而改变。例如,在开发应用程序的过程当中,会增长一张新表且必须得加进来; 在应用程序被部署到生产环境后,须要创建一个索引来提升查询的性能等等。 由于一个数据库结构发生改变的时候源代码也常常会须要作出改变,Yii 提供了一个 数据库迁移 功能,该功能能够记录数据库的变化, 以便使数据库和源代码一块儿受版本控制。php

这里分享Yii2.0框架数据库迁移的使用,控制台如何使用migrate命令。
一、默认迁移文件
全部建立的迁移文件都被统一放在 console/migrations 文件夹里,打开后能够看到默认的相似m200311_020625_user.php(这里举例表名为user)的php文件。能够看到在该文件里面定义了一个 m200311_020625_user类,并继承自 Migration 基类。m200311_020625_user 有两个方法 up 和 down :laravel

当咱们运行迁移时,up 方法会被调用;
当咱们回滚迁移时,down 方法会被调用数据库

二、建立迁移(注意yii命令在框架根目录)框架

yii migrate/create <name>yii

好比:ide

yii migrate/create create_news_tablepost

那么迁移目录中会多出一个相似m200311_020625_create_news_table.php的文件,文件代码以下:性能

<?phpthis

use yii\db\Migration;编码

class m150101_185401_create_news_table extends Migration
{
public function up()
{

}

public function down()
{
    echo "m101129_185401_create_news_table cannot be reverted.\n";

    return false;
}

每一个数据库迁移都会被定义为一个继承自 yii\db\Migration 的 PHP 类。
类的名称按照 m<YYMMDDHHMMSS><Name> 的格式自动生成,其中
<YYMMDDHHMMSS> 指执行建立迁移命令的 UTC 时间。
<Name> 和你执行命令时所带的 name 参数值相同。

三、迁移文件的详细编码示范:
在迁移类当中,你应当在 up() 方法中编写改变数据库结构的代码。 你可能还须要在 down() 方法中编写代码来恢复由 up() 方法所作的改变。 当你经过 migration 升级数据库时, up() 方法将会被调用,反之, down() 将会被调用。 以下代码展现了如何经过迁移类来建立一张 news 表:

use yii\db\Schema;
use yii\db\Migration;

class m150101_185401_create_news_table extends \yii\db\Migration
{
public function up()
{
$this->createTable('news', [
'id' => Schema::TYPE_PK,
'title' => Schema::TYPE_STRING . ' NOT NULL',
'content' => Schema::TYPE_TEXT,
]);
}

public function down()
{
    $this-&gt;dropTable('news');
}

}

四、生成迁移

yii migrate/create create_post

利用 --fields 选项指定字段参数,能够当即建立字段以下:

yii migrate/create create_post --fields="title:string,body:text"

生成的迁移以下:

/**

  • Handles the creation for table post.
    */
    class m150811_220037_create_post extends Migration
    {
    /**

    • @inheritdoc
      */
      public function up()
      {
      $this->createTable('post', [
      'id' => $this->primaryKey(),
      'title' => $this->string(),
      'body' => $this->text(),
      ]);
      }

    /**

    • @inheritdoc
      */
      public function down()
      {
      $this->dropTable('post');
      }
      }

五、提交迁移

yii migrate 或yii migrate/up
若是你肯定你须要提交这些迁移, 它将会按照类名当中的时间戳的顺序,一个接着一个的运行每一个新的迁移类里面的 up() 或者是 safeUp() 方法

按照以下格式使用 migrate/to 命令 来指定数据库应该提交哪个迁移:

yii migrate/to m150101_185401_create_news_table

六、回滚迁移

yii migrate/down

本文参考了Yii框架官方文档

相关文章
相关标签/搜索