Yii2 数据库迁移组件的使用

icy2003 程序 2020-03-17 13:41:15 1124 0条

告别 sql 导入,用数据库迁移组件来管理你的数据库吧!

migration.png

Yii 提供了一整套的迁移命令行工具,通过这些工具你可以:

  • 创建新的迁移
  • 提交迁移
  • 恢复迁移
  • 重新提交迁移
  • 展示迁移历史和状态

以高级模板为例子,如果你无法安装高级模板,可以看看我这篇文章:关于“Yii2 高级模板”的使用

我最近比较忙,这里只说一些我常用的操作。

创建迁移文件

yii migrate/create user

这会在 console/migrations 目录下创建类似于 m200317_065726_user.php 的文件,该文件提供了最基础的模板,可以在此基础上进行自定义。

补全数据

up 方法里添加如下代码:

$this->createTable('{{%user}}', [
    'id' => $this->primaryKey(),
    'username' => $this->string()->notNull()->unique(),
    'password_hash' => $this->string()->notNull(),
]);

所有可用的方法可以通过编辑器的自动补全功能查询,常见的有:

  • createTable() 创建表
  • batchInsert() 插入多行数据
  • dropTable() 删除一张表

更多请看这里

值得一提的是,创建表时的额外参数可以在 createTable 第三参数补上,如:createTable(..., ..., 'CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE=InnoDB'),为此我对这部分进行了一些改写省去了这些麻烦:

引入 icy2003/php 代替 Migration 类。

use icy2003\php\iextensions\yii2\db\Migration;

改写数据库配置:

use icy2003\php\iextensions\yii2\db\Connection;

return [
    'class' => Connection::className(),
    'dsn' =>'imysql:host=localhost;...',
    ...
];

这样创建出来的表默认就会是 InnoDB 引擎 和 UTF-8 编码(只适用于 mysql)。

提交迁移

yii migrate

这样就会能将迁移文件里的改动更新到数据库。

还原迁移

down 方法里写的代码会在此时执行,一般都是用于回滚,例如删除表和数据。

yii migrate/down

migration 的好处

  • Yii2 的 migration 组件还能用于控制台应用,通过控制台应用我们可以创建自己的自动化部署程序。
  • 相比于 sql 导入,你可以借助 php 初始化一些特殊数据例如:密码的 hash 值。
  • migration 可以跟随源码一起进行版本管理,升级不再混乱。
  • 一处实现,生产开发环境一键部署。

参考资料

标签: php, yii2

非特殊说明,本博所有文章均为博主原创。