activecollab/databasemigrations

数据库模式迁移

4.1.0 2022-04-24 20:42 UTC

This package is auto-updated.

Last update: 2024-09-22 14:50:52 UTC


README

Build Status

迁移

要编写迁移,创建一个可以被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类的迁移通过构造函数注入两个重要属性

  1. connection - 一个具有有效数据库连接的ActiveCollab\DatabaseConnection\ConnectionInterface实例,以及
  2. log - 一个PSR-3 LoggerInterface实例。
<?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注释下的受保护方法和抽象方法以获取详细信息。

待办事项

  1. 将基本的字段、索引和外键管理辅助方法添加到Migration基本实现中