bizley / migration
为 Yii 2 生成迁移。
Requires
- php: >=7.2
- ext-mbstring: *
- ext-pdo: *
- yiisoft/yii2: ^2.0.19
Requires (Dev)
- infection/infection: *
- phpstan/phpstan: *
- phpunit/phpunit: <10.0
- roave/security-advisories: dev-latest
- dev-master
- 4.4.1
- 4.4.0
- 4.3.1
- 4.3.0
- 4.2.0
- 4.1.4
- 4.1.3
- 4.1.2
- 4.1.1
- 4.1.0
- 4.0.5
- 4.0.4
- 4.0.3
- 4.0.2
- 4.0.1
- 4.0.0
- 4.0.0-RC2
- 4.0.0-RC1
- 3.x-dev
- 3.6.6
- 3.6.5
- 3.6.4
- 3.6.3
- 3.6.2
- 3.6.1
- 3.6.0
- 3.5.0
- 3.4.0
- 3.3.0
- 3.2.0
- 3.1.0
- 3.0.5
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 2.x-dev
- 2.9.6
- 2.9.5
- 2.9.4
- 2.9.3
- 2.9.2
- 2.9.1
- 2.9.0
- 2.8.0
- 2.7.0
- 2.6.0
- 2.5.0
- 2.4.0
- 2.3.4
- 2.3.3
- 2.3.2
- 2.3.1
- 2.3.0
- 2.2.3
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.2
- 2.1.1
- 2.1
- 2.0
- 1.1
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-dependabot/composer/phpunit/phpunit-lt-12.0
This package is auto-updated.
Last update: 2024-09-09 17:25:26 UTC
README
Yii 2 迁移
迁移创建器和更新器
在理想的世界里,你首先为数据库准备迁移文件,以便在准备就绪时运行它。但既然这不是一个完美的世界,有时你会从一个已经设置好的数据库开始 - 使用这个包,你可以轻松地使用 一个控制台命令 基于你的 DB 架构 创建迁移文件。
此外,当你的数据库稍后更新时,你可以 生成一个迁移文件以更新架构到当前状态。该包会将其与迁移历史进行比较
- 扫描应用的迁移历史以收集对表的所有修改。
- 准备虚拟表架构并与当前表架构进行比较。
- 差异作为更新迁移生成。
- 如果在迁移历史中未保留有关表的信息,则生成创建迁移。
安装
运行控制台命令
composer require --dev bizley/migration
或将其添加到您的 composer.json
文件中
{ "require-dev": { "bizley/migration": "^4.0" } }
然后运行 composer update
。
配置
在您的配置文件中添加以下内容(最好是控制台配置文件)
[ 'controllerMap' => [ 'migration' => [ 'class' => 'bizley\migration\controllers\MigrationController', ], ], ]
以下选项(及其默认值)可用
[ 'controllerMap' => [ 'migration' => [ 'class' => 'bizley\migration\controllers\MigrationController', 'migrationPath' => '@app/migrations', // Directory storing the migration classes 'migrationNamespace' => null, // Full migration namespace 'useTablePrefix' => true, // Whether the table names generated should consider the $tablePrefix setting of the DB connection 'onlyShow' => false, // Whether to only display changes instead of generating update migration 'fixHistory' => false, // Whether to add generated migration to migration history 'skipMigrations' => [], // List of migrations from the history table that should be skipped during the update process 'excludeTables' => [], // List of database tables that should be skipped for actions with "*" 'fileMode' => null, // Permission to be set for newly generated migration files 'fileOwnership' => null, // User and/or group ownership to be set for newly generated migration files 'leeway' => 0, // Leeway in seconds to apply to a starting timestamp when generating migration ], ], ]
用法
以下控制台命令可用(假设您将控制器命名为 migration
,如下面的示例所示)
-
列出数据库中的所有表
php yii migration
或
php yii migration/list
-
生成创建数据库表
table_name
的迁移php yii migration/create "table_name"
-
生成更新数据库表
table_name
的迁移php yii migration/update "table_name"
要一次生成数据库中所有表(除了排除的表)的迁移,请使用星号 (*)
php yii migration/create "*" php yii migration/update "*"
您可以通过逗号分隔名称来一次为多个表生成多个迁移
php yii migration/create "table_name1,table_name2,table_name3"
您可以将星号作为表名的一部分来使用所有匹配该模式的表
php yii migration/update "prefix_*"
一次创建多个表迁移时,会根据外键的存在强制正确的迁移顺序。当表相互引用时,将在默认生成之后生成额外的外键迁移。
-
提取迁移
migration_name
的 SQL 语句(UP)(自 4.4.0 版本起新增)php yii migration/sql "migration_name"
-
提取迁移
migration_name
的 SQL 语句(DOWN)(自 4.4.0 版本起新增)php yii migration/sql "migration_name" "down"
命令行参数
[1] 请记住,由于不同的数据库类型,通用列架构可能具有不同的长度。
MySQL 示例
列
varchar(255)
generalSchema=false:$this->string(255)
generalSchema=true:$this->string()
列
int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY
generalSchema=false:$this->integer(11)->notNull()->append('AUTO_INCREMENT PRIMARY KEY')
generalSchema=true:$this->primaryKey()
当列大小与 DBMS 的默认值不同时,它将被保留
列varchar(45)
generalSchema=false:$this->string(45)
generalSchema=true:$this->string(45)
[2] 您可以将包含无法由提取器覆盖的操作的迁移放在此处,例如当有迁移使用 authManager 组件设置 RBAC 层级时。这些操作应保留在单独的迁移中,并放在此列表中,以防止在提取过程中运行它们。
[3] 此模式允许在迁移更新器中使用原始SQL列定义(例如 ['column' => 'varchar(255)']
而不是 ['column' => $this->string()]
)。由于此模式中的生成过程依赖于特定DBMS的语法,结果可能不正确。欢迎所有帮助改进此模式的人。
关于重命名表或列的重要信息
当您重命名表或列时,请记住手动生成适当的迁移,否则此扩展将不会生成更新迁移(如果是表的情况)或生成包含删除原始列和添加重命名列的命令的迁移(如果是列的情况)。这是因为yii2-migration只能比较表的两个状态,而不知道一个状态是如何变成另一个状态的。虽然迁移重命名列和删除列并添加另一列的结果在结构上是相同的,但后者会导致您丢失数据。
一旦将重命名迁移添加到历史记录中,它就会被扩展跟踪。
从v2或v3迁移到v4
请参阅迁移到版本4.0部分。
注释
此扩展应与Yii 2核心支持的所有数据库类型一起工作
- CUBRID(9.3.x及以上版本)
- MS SQL Server(2008及以上版本)
- MySQL(4.1.x、5.x、8.x)
- Oracle
- PostgreSQL(9.x及以上版本)
- SQLite(2/3)
只有扩展yii\db\Migration
类的迁移历史可以被正确扫描,并且只有使用默认yii\db\Migration
方法应用的变化可以被识别(除了execute()
、addCommentOnTable()
和dropCommentFromTable()
方法)。对表数据进行更改(如insert()
、upsert()
、delete()
、truncate()
等)不会被跟踪。
更新迁移过程需要createTable()
、addColumn()
和alterColumn()
方法以提供以yii\db\ColumnSchemaBuilder
实例的形式的列定义更改(如$this->string()
而不是'varchar(255)'
)。
4.4.0版的新功能,支持从现有迁移中提取SQL语句,支持yii\db\Migration
中所有可用的方法。
测试
提供了MySQL、PostgreSQL和SQLite的测试。数据库配置存储在tests/config.php
中(您可以通过创建该位置的config.local.php
文件来覆盖它)。
用于设置数据库的Docker Compose文件存储在tests/docker
中。
以前版本
这些版本不再开发,但仍对所有受EOL PHP困扰的人提供。其中一些最新功能可能不可用。