告别 sql 导入,用数据库迁移组件来管理你的数据库吧!
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 可以跟随源码一起进行版本管理,升级不再混乱。
- 一处实现,生产开发环境一键部署。