migrate主要是做数据库创建、更新和删除用的,Yii2为我们提供了这一个功能,方便我们在开发网站过程中对数据库进行操作,但是根据我的经验在实际的开发用到的这个很少,不过这功能也有他的方便之处,特别是在更换数据库时。
migrate的语法
./yii migrate/create <name> //创建文件,name是个必填项
注意:<name>这个只能字母、数字、下划线,因为这个指令会生成一个迁移类,并且这个<name>将会是生成类名的一部分。
举个例子:
切换到根目录,执行:./yii migrate/create ff_admin_user 会提示是否创建文件选择yes即可。
localhost:webroot feifeixueyuan$ ./yii migrate/create ff_admin_user Yii Migration Tool (based on Yii v2.0.15.1) Create new migration '/web/feifeixueyuan/webroot/console/migrations/m181023_051301_ff_admin_user.php'? (yes|no) [no]:yes New migration created successfully.
上方命令执行完成后将会在根目录 /console/migrations/下生产m181023_051301_ff_admin_user.php文件。
看一下m181023_051301_ff_admin_user.php文件的内容
class m181023_051301_ff_admin_user extends Migration { public function up() { $tableOptions = null; if ($this->db->driverName === 'mysql') { $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB'; } $this->createTable('{{%admin_user}}', [ '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); //初始化插入数据 $this->insert('{{%admin_user}}', [ 'id' => 1, 'auth_key' => 'nQpUL5ATcZnB', ]); } public function down() { $this->dropTable("{{%admin_user}}"); }
[wppay]代码中的方法up是用来创建数据库的结构的,down方法是用来恢复由up代码执行后所做的改变,我们若对数据库进行升级可以调用up方法,恢复可以调用down方法。
代码$this->string()->notNull()指的是抽象自定义字段类型,就是说并不直接写字段的类型,而是写每个数据库中类似的自定义字段,比如:mysql中有个字段类型为text,而mssql中的并没有text类型,但是有个类似的类型是ntext,这样在数据库迁移时就会很麻烦,但是使用自定义抽象类型就很简单了,Yii已经帮我们把底层的封装好了,只需要简单的执行命令即可迁移。
下面是访问数据库时的方法列表:
yii\db\Migration::execute(); //执行一条 SQL 语句
yii\db\Migration::insert(); //插入单行数据
yii\db\Migration::batchInsert(); //插入多行数据
yii\db\Migration::update(); //更新数据
yii\db\Migration::delete(); //删除数据
yii\db\Migration::createTable(); //创建表
yii\db\Migration::renameTable(); //重命名表名
yii\db\Migration::dropTable(); //删除一张表
yii\db\Migration::truncateTable(); //清空表中的所有数据
yii\db\Migration::addColumn(); //加一个字段
yii\db\Migration::renameColumn(); //重命名字段名称
yii\db\Migration::dropColumn(); //删除一个字段
yii\db\Migration::alterColumn(); //修改字段
yii\db\Migration::addPrimaryKey(); //添加一个主键
yii\db\Migration::dropPrimaryKey(); //删除一个主键
yii\db\Migration::addForeignKey(); //添加一个外键
yii\db\Migration::dropForeignKey(); //删除一个外键
yii\db\Migration::createIndex(); //创建一个索引
yii\db\Migration::dropIndex(); //删除一个索引
创建数据库可以执行如下代码:
./yii migrate //提交迁移
./yii migrate m181023_051301_ff_admin_user.php . //指定类名,提交一个迁移
执行完后数据库migration会有一条操作记录。(migration就是一个日志表)
./yii migrate/down //还原迁移
./yii migrate/down 3 //还原最近三次迁移
./yii migrate/redo //重做最近一次的迁移
./yii migrate/redo 3 //重做最近三次的迁移
可以通过下面的命令,查看迁移的历史
./yii migrate/history //显示最近10次提交的迁移
./yii migrate/history 6 //显示最近5次提交的迁移
./yii migrate/history all //显示所有的提交迁移
./yii migrate/new //显示最近10次未提交的迁移
./yii migrate/new 6 //显示最近6次未提交的迁移
./yii migrate/new all //显示所有的未提交迁移
[/wppay]