Yii2 migrate使用

2017年1月20日 · 102 字 · 1 分钟

试想一个很简单的场景,在使用Yii2开发时,如果对已经有数据的数据表结构进行编辑的话,需要同步数据结构需要在本地导出一份SQL,放到线上去执行SQL,非常的不方便。 而有了Yii2 migrate工具之后,这个问题简直不是问题。以下对常用的表结构操作进行演示。

关键命令

  • 创建migrate
yii migrate/create [名称]
  • 执行migrate升级
yii migrate
  • 执行migrate降级
yii migrate/down

创建新表

执行创建migrate命令后,项目文件夹下migrations中会多出m170119_093917_[名称].php的文件,文件名称可能不同,但是结构是相同的,打开该php文件,内容如下

<?php
use yii\db\Migration;

class m170119_093917_name_20 extends Migration
{
	public function up()
	{
		$tableName = 't_category';
		$this->createTable($tableName, [
			'id' => $this->primaryKey(),
			'name' => $this->string(10)->notNull()->unique()->comment('标识'),
			'title' => $this->string(6)->notNull()->comment('名称'),
			'count' => $this->integer()->defaultValue(0)->notNull()->comment('入驻数量')
		]);
	}

	public function down()
	{
		echo "m170119_093917_name_20 cannot be reverted.\n";
		return false;
	}

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

	public function safeDown()
	{
	}
	*/
}

如果需要支持降级的话在down方法中写逻辑返回true即可。

以下代码演示Migration操作,不再新建migrate,执行使用本php文件即可

添加字段

<?php
$this->addColumn('t_category','sort',$this->integer()->defaultValue(0)->notNull()->comment('排序'));

添加索引

<?php
$this->createIndex('sort','t_category',['sort']);

添加唯一索引

<?php
$this->createIndex('sort','t_category',['sort'],true);

更新字段

<?php
$this->alterColumn('t_category','sort',$this->smallInteger()->defaultValue(0)->notNull()->comment('排序'));

删除字段

<?php
$this->dropColumn('t_category','sort');

删除表

<?php
$this->dropTable('t_category');