websvc / yii2migration
Yii 2 迁移生成器。
Requires
- php: >=5.6
- ext-mbstring: *
- yiisoft/yii2: >=2.0.15.1 <2.1.0
Requires (Dev)
- phpunit/phpunit: ^7.3
- roave/security-advisories: dev-master
README
免责声明
这是对 https://github.com/bizley/yii2-migration 的分支,所有功劳归Bizley!
这个主要是为了自用,这里的修改基于3.6.5版本的3.x分支。
这里的改动为模板中添加了init()函数,以便在执行迁移时指定要使用的数据库连接。
这允许使用默认的Yii迁移工具,而无需在命令中指定数据库连接。
测试内容
方法:创建和创建所有
迁移创建器和更新器
基于现有数据库表和之前的迁移生成迁移文件。
安装
将包添加到您的composer.json中
{
"require": {
"websvc/yii2migration": "^3.7"
}
}
然后运行 composer update
或运行 composer require websvc/yii2migration:^3.7
其他版本
配置
在您的配置文件中添加以下内容(最好是控制台配置文件)
'components' => [
// ...
],
'controllerMap' => [
'migration' => [
'class' => 'websvc\yii2migration\controllers\MigrationController',
],
],
使用方法
以下控制台命令可用
-
列出数据库中的所有表
php yii migration
或
php yii migration/list
-
生成创建数据库表
table_name
的迁移php yii migration/create table_name
-
生成创建所有数据库表的迁移
php yii migration/create-all
-
生成更新数据库表
table_name
的迁移php yii migration/update table_name
-
生成更新所有数据库表的迁移
php yii migration/update-all
您可以通过逗号分隔名称来同时为多个表生成多个迁移
php yii migration/create table_name1,table_name2,table_name3
从版本3.4/2.7开始,一次生成多个表迁移将强制基于外键的存在来正确排序迁移顺序。当表相互引用时,额外的外键迁移将在默认生成后生成。
更新迁移
从yii2-migration v2.0开始,可以为数据库表生成更新迁移。
- 扫描已应用的迁移历史以收集对表所做的所有修改。
- 准备虚拟表模式并与当前表模式进行比较。
- 差异将作为更新迁移生成。
- 如果迁移历史没有保留关于表的创建迁移的信息,则会生成创建迁移。
命令行参数
请记住,对于不同的数据库类型,通用的列模式可能具有不同的长度。
MySQL示例
列
varchar(255)
generalSchema=0:$this->string(255)
generalSchema=1:$this->string()
列
int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY
generalSchema=0:$this->integer(11)->notNull()->append('AUTO_INCREMENT PRIMARY KEY')
generalSchema=1:$this->primaryKey()
从3.6/2.9版本开始,如果列大小与DBMS默认值不同,则保留
列varchar(45)
generalSchema=0:$this->string(45)
generalSchema=1:$this->string(45)
[2] 您可以在此处放置包含不能被提取器覆盖的操作的迁移,例如当有迁移设置authManager组件的RBAC层次结构时。这些操作应该保存在单独的迁移中,并放在此列表中,以防止它们在提取过程中运行。
重命名
当您重命名表或列时,请记得手动生成适当的迁移,否则此扩展将不会生成更新迁移(如果是表的话),或者将生成删除原始列并添加重命名列的迁移命令(如果是列的话)。这是因为 yii2-migration 只能比较表的两个状态,而没有了解一个状态是如何变成另一个状态的。虽然迁移重命名列和删除它然后添加另一个列的结果在结构上是一样的,但后者会使您丢失数据。
一旦您将重命名迁移添加到历史记录,它就会由扩展进行跟踪。
注意事项
此扩展应与 Yii 2 核心支持的所有数据库类型一起工作
- CUBRID(9.3.x 及更高版本)
- MS SQL Server(2008 及以上版本)
- MySQL(4.1.x 和 5.x)
- Oracle
- PostgreSQL(9.x 及以上版本)
- SQLite(2/3)
Yii 2 限制
- 需要 2.0.13 版本以跟踪非唯一索引
- 需要 2.0.14 版本以处理 TINYINT 和 JSON 类型列
只有扩展 yii\db\Migration
类的迁移历史可以被正确扫描,并且只有使用默认 yii\db\Migration
方法应用的变化可以被识别(除 execute()
、addCommentOnTable()
和 dropCommentFromTable()
方法外)。对表数据进行的更改(如 insert()
、upsert()
、delete()
、truncate()
等)不会被跟踪。
更新迁移的过程需要 createTable()
、addColumn()
和 alterColumn()
方法提供以 yii\db\ColumnSchemaBuilder
实例形式表示的列定义更改(如 $this->string()
而不是 'varchar(255)'
)。
测试
提供了 MySQL、PostgreSQL 和 SQLite 的测试。数据库配置存储在 tests/config.php
中(您可以通过创建该目录中的 config.local.php
文件来覆盖它)。