activecollab / databasemigrations
数据库模式迁移
4.1.0
2022-04-24 20:42 UTC
Requires
- php: >=8.0
- activecollab/databaseconnection: ^5.0
- activecollab/filesystem: ^0.10
- doctrine/inflector: ^2.0
- psr/log: ^1.0
Requires (Dev)
- ext-mysqli: *
- friendsofphp/php-cs-fixer: ^2.0
- monolog/monolog: ^1.0
- phpunit/phpunit: ^9.0
- symfony/console: ^4.0
Suggests
- symfony/console: Quickly implement commands that work with migrations via CLI
README
迁移
要编写迁移,创建一个可以被Finder发现的使用中的类,并扩展Migration
类
<?php namespace Acme\App\Migrations; use ActiveCollab\DatabaseMigrations\Migration\Migration; class AddUserRolesTable extends Migration { /** * {@inheritdoc} */ public function up() { } }
如果你不喜欢Migration
类的结构,你可以按照你想要的方式编写迁移,只要实现MigrationInterface
<?php namespace Acme\App\Migrations; use ActiveCollab\DatabaseMigrations\Migration\MigrationInterface; class AddUserRolesTable implements MigrationInterface { … }
扩展Migration
类的迁移通过构造函数注入两个重要属性
connection
- 一个具有有效数据库连接的ActiveCollab\DatabaseConnection\ConnectionInterface
实例,以及log
- 一个PSR-3LoggerInterface
实例。
<?php namespace Acme\App\Migrations; use ActiveCollab\DatabaseMigrations\Migration\Migration; class AddUserRolesTable extends Migration { /** * {@inheritdoc} */ public function up() { if (!in_array('user_roles', $this->connection->getTableNames()) { $this->logger->debug('{table} not found in the database', ['table' => 'user_roles']); $thos->connection->execute('CREATE TABLE STATEMENT'); $this->logger->debug('{table} created', ['table' => 'user_roles']); } } }
查找器
迁移类通过实现FinderInterface
接口的对象来"发现"。我们对查找器的期望只是它们返回一个数组,其中键是迁移类名,值是在其中可以找到类定义的路径。这使得迁移库不依赖于你用来组织迁移的目录和文件结构。
这个库目前只实现了其中一个查找器 - Changesets中的迁移。
Changeset查找器中的迁移
我们发现对于Active Collab项目来说,将迁移分组到changeset中效果非常好。一个changeset是一个包含一个或多个相关迁移的目录。changeset目录名的有效格式是YYYY-MM-DD-what-this-is-all-about
。以下是一些有效的changeset名称
2016-01-02-add-invoicing-module
2016-03-12-remove-is-trashed-project-field
2016-12-09-fix-users-table-indexes
changeset名称的时间戳部分用于排序,详细信息部分用于清楚地说明changeset的内容。
命令行
数据库迁移包包含一些特性,使得实现与迁移一起工作的命令变得简单。这些命令包括
- 列出所有迁移及其状态(所有)
- 运行所有未执行的迁移(向上)
- 创建一个新的迁移文件(创建)
为了使用这些特性,你需要在常规的Symfony Console类中包含它们,并实现getMigrations()
方法。此方法需要返回一个有效的、配置好的MigrationsInterface
实例。
创建辅助程序有额外的要求和扩展点,可以让你配置迁移占位符的创建方式。请查看/src/Command/Create.php
文件中Override
注释下的受保护方法和抽象方法以获取详细信息。
待办事项
- 将基本的字段、索引和外键管理辅助方法添加到
Migration
基本实现中