softius/phig

PHP 5.3 的数据库迁移

dev-master 2013-01-07 17:34 UTC

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,因此具有 updown 方法。当执行向上迁移时调用 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
  • 支持多个迁移文件夹
  • 编写迁移章节中添加更多示例