tinyapps / db-updater
用于管理和执行数据库更新的简单PHP库。
v1.0.11
2021-11-25 20:59 UTC
Requires
- php: ^7.4.0 || ^8.0
Requires (Dev)
- phpunit/phpunit: ^9.5
README
数据库更新器
这是一个用于管理和执行数据库更新的简单PHP库。它允许您将数据库更新存储在目录或单个配置文件中,并在不同的环境中轻松执行。
每个更新都需要一个唯一的ID。与增量版本不同,这使得可以独立更新(例如,来自不同的功能和开发分支)成为可能,一旦功能合并或部署,它们可以自动执行。
安装
composer require tinyapps/db-updater
支持以下模式: 目录、JSON配置和PHP配置。您可以在示例文件夹中找到每种模式的示例。
在JSON/PHP模式下,如果给定文件路径不存在文件,将创建一个空配置文件。或者,您可以在示例文件夹中找到配置文件。
入门
按照上述安装说明操作后,您需要决定使用哪种配置模式。默认启用目录模式,其中每个更新都存储在更新文件夹中的专用文件中。或者,您可以使用单个配置模式,使用JSON或PHP文件。
选择您的配置模式
- 目录模式
- 创建一个空文件夹,用于存储更新 - 例如
db/updates/
。稍后您需要将此目录传递给更新器。
- 创建一个空文件夹,用于存储更新 - 例如
- JSON/PHP配置模式
- 首次初始化更新器时,配置将自动生成在您指定的路径。请确保此路径指向一个可写文件夹,并且不存在具有该名称的文件。您需要将
Updater::MODE_JSON
或Updater::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,并在其中输入您的数据库凭据。