softius / phig
PHP 5.3 的数据库迁移
Requires
- php: >=5.3.0
- symfony/console: 2.*
Requires (Dev)
- phpunit/phpunit: 3.*
This package is auto-updated.
Last update: 2024-09-14 05:14:47 UTC
README
phig 为 PHP 提供了一种方便的执行数据库迁移的方法。它是供应商和框架无关的,可以与任何 PDO 驱动或数据库抽象框架(如 Doctrine)一起使用。
phig 的目标是
- 数据库框架无关:无需特定框架或库的背景知识即可开始。
- 提供可靠的迁移机制,可嵌入任何项目
需要 PHP 5.3+。
安装
phig 在 Packagist 上可用。您只需要在项目的 composer.json
中添加以下行
{ "require": { "softius/phig": "*@dev" } }
并通过 composer 安装
php composer.phar install
将添加一个可执行文件到您的项目 vendor/bin
目录下。如果您想更改此设置,请参阅此 指南。
运行迁移
phig 提供了一套任务,这些任务可以执行挂起的迁移或已执行的迁移步骤的回滚(撤销)。
例如,要执行所有挂起的迁移,请运行
phig migrate
如果您想达到特定的迁移,可以通过以下方式指定它。如果省略,将执行所有挂起的迁移。
phig migrate 20121230185208
这适用于向上和向下迁移。例如,如果目标 20121230185208 大于当前版本,这将触发向上迁移(调用所有迁移的 up 方法)。相反,如果目标 20121230185208 小于或等于当前版本,这将触发向下迁移(调用所有迁移的 down 方法)。有关 up 和 down 方法的更多信息,请参阅 编写迁移 部分。
撤销
要撤销最后一个迁移步骤,请运行
phig rollback
如果您想撤销多个迁移步骤,可以通过 step
参数指定
phig rollback 5
上述操作将撤销最后一个 5 个迁移。
执行转储
如果您想查看上述任何命令的结果而不实际执行它们,请附加 --dump
选项。这将返回关于相应命令计划执行的操作的有用信息。以下示例都是有效的
phig migrate --dump
phig migrate 20121230185208 --dump
phig rollback --dump
phig rollback 3 --dump
编写迁移
迁移不过是 PHP 中的类,在开始编写代码之前,您应该注意以下约束
- 所有迁移必须放在单个目录中。
- 任何迁移类都必须扩展
MigratableInterface
,因此具有up
和down
方法。当执行向上迁移时调用up
方法,而在向下迁移和回滚时调用down
方法。换句话说,调用up
方法来创建更改,而调用同一类的down
方法来撤销该更改。 - 迁移文件的名称很重要,因为它用于 phig 操作的参考哈希。虽然可以使用日期时间、序列(整数,例如构建号)或甚至版本控制方案,但我建议遵循日期时间模式。
以下是一个示例
// yourproject/migrations/20130104152443-MigrationExample.php class MigrationExample implements \Phig\MigratableInterface { public method up() { create_table('users'); } public method down() { destroy_table('users'); } }
使用 PDO 驱动程序
以下示例说明如何使用 PDO Migratable 抽象类。如您所见,没有提供数据库助手。
// yourproject/migrations/20130107193139-PdoMigrationExample.php class PdoMigrationExample extends \Phig\Migratable\Pdo { public method up() { $this->getConnection()->exec('CREATE TABLE users … '); } public method down() { $this->getConnection()->exec('DROP TABLE users'); } }
待办事项
- 为
PDO 驱动程序和 Doctrine 库提供抽象类 - 改进配置/在文档中添加部分
允许在迁移文件名中定义(因此发现)类名,例如20121230185208-MigrationExample
(而不是20121230185208.php
)- 支持多个迁移文件夹
- 在编写迁移章节中添加更多示例