tinyapps/db-updater

用于管理和执行数据库更新的简单PHP库。

v1.0.11 2021-11-25 20:59 UTC

This package is auto-updated.

Last update: 2024-09-26 03:44:35 UTC


README

Unit Tests

数据库更新器

这是一个用于管理和执行数据库更新的简单PHP库。它允许您将数据库更新存储在目录或单个配置文件中,并在不同的环境中轻松执行。

每个更新都需要一个唯一的ID。与增量版本不同,这使得可以独立更新(例如,来自不同的功能和开发分支)成为可能,一旦功能合并或部署,它们可以自动执行。

安装

composer require tinyapps/db-updater

支持以下模式: 目录JSON配置PHP配置。您可以在示例文件夹中找到每种模式的示例。

在JSON/PHP模式下,如果给定文件路径不存在文件,将创建一个空配置文件。或者,您可以在示例文件夹中找到配置文件。

入门

按照上述安装说明操作后,您需要决定使用哪种配置模式。默认启用目录模式,其中每个更新都存储在更新文件夹中的专用文件中。或者,您可以使用单个配置模式,使用JSON或PHP文件。

选择您的配置模式

  • 目录模式
    • 创建一个空文件夹,用于存储更新 - 例如 db/updates/。稍后您需要将此目录传递给更新器。
  • JSON/PHP配置模式
    • 首次初始化更新器时,配置将自动生成在您指定的路径。请确保此路径指向一个可写文件夹,并且不存在具有该名称的文件。您需要将Updater::MODE_JSONUpdater::MODE_PHP作为更新器构造函数的第三个参数(new Updater(...))传递以启用此模式。

执行更新

  • 创建一个运行未完成更新的脚本文件。在这个例子中,我们将在这里创建一个新的PHP文件: scripts/db-updates.php
  • 首先,您需要一个PDO实例来连接数据库。如果您在项目中还没有返回PDO实例的辅助类或类似的东西,请阅读以下文档: PHP: PDO::__construct - Manual
  • 在脚本中使用$updater = new Updater($pdo, __DIR__ . '/../db/updates');创建一个新的更新器实例,其中包含您的PDO连接。
    • 如果使用JSON/PHP模式,则需要传递第三个参数
  • 使用$updater->executeOutstandingUpdates(false);(请参阅下面的示例以获取更多详细信息)运行未完成的更新(带有输出)

保存新的更新

有两种方法可以添加更新

  • 使用更新器的saveNewUpdate方法程序化创建一个更新(请参阅下面的示例)。
  • 手动创建一个包含更新查询的文件。文件名用作更新的ID,在目录模式中必然是唯一的。例如,在更新文件夹中创建一个名为my-first-update.sql的文件,并将您的查询放在其中(用分号;分隔)。

示例代码

初始化

use TinyApps\DbUpdater\Updater;

$pdo = new PDO(...); // Your PDO instance
$updater = new Updater($pdo, __DIR__ . '/path/to/updates', Updater::MODE_DIR);

执行未完成的更新

use TinyApps\DbUpdater\Exceptions\UpdateFailureException;

try {
	$executedUpdates = $updater->executeOutstandingUpdates();
	echo count($executedUpdates) . ' outstanding updates were executed';
} catch (UpdateFailureException $e) {
	// An update failed
	echo $e->getMessage();
}

执行单个更新

use TinyApps\DbUpdater\Exceptions\UpdateFailureException;

try {
	$updater->executeUpdateWithId('example-update');
	echo 'Update #example-update executed';
} catch (UpdateFailureException $e) {
	echo $e->getMessage();
}

程序化添加更新

saveNewUpdate方法可选地接受第二个参数,包含更新的ID。如果省略,则使用包含日期和随机哈希的新唯一ID(建议使用)。

$updater->saveNewUpdate([
	'CREATE TABLE ...',
	'ALTER TABLE ...',
]);

单元测试

库包含针对每种模式的单元测试。要执行它们,设置以下环境变量并执行composer test

  • 数据库
  • DB_HOST
  • 数据库用户
  • 数据库密码
  • 数据库端口

您还可以调整phpunit.xml,并在其中输入您的数据库凭据。