ilias / maestro
PHP面向对象的PostgreSQL数据库管理器
Requires
- ilias/dotenv: ^1.0
Requires (Dev)
- phpunit/phpunit: ^11.2
This package is auto-updated.
Last update: 2024-09-29 06:36:58 UTC
README
Maestro 是一个PHP库,旨在简化PostgreSQL数据库模式和表的创建与管理。它允许开发人员使用PHP类定义模式和表,提供了一种清晰和结构化的方式来管理数据库定义和关系。
目录
安装
要安装Maestro,请使用Composer
composer require ilias/maestro
模式和表类
Maestro使用抽象类来定义模式和表。开发人员可以通过扩展这些类来定义自己的模式和表。
定义模式和表
模式类
一个模式类扩展了Schema抽象类。它包含表属性,这些属性用表类进行类型化。
表类
一个表类扩展了Table抽象类。它可以定义列作为类属性,指定它们的类型和可选的默认值。
唯一列
您可以通过覆盖表类中的tableUniqueColumns方法来指定应具有唯一性的列。您还可以通过将@unique子句添加到您想使其唯一的属性文档中来定义一个唯一列。如果覆盖了tableUniqueColumns方法,则此格式将不起作用。
默认值
列可以具有默认值。如果默认值是PostgreSQL函数,则应将其定义为PostgresFunction类型,以确保它不会在最终的SQL查询中加引号。
DatabaseManager
DatabaseManager类提供用于创建模式、表和管理外键约束的方法。
创建模式和表
createSchema和createTable方法生成用于创建模式和表的SQL查询。createTablesForSchema方法处理创建模式内的所有表及其外键约束。
外键约束
在创建表后,使用ALTER TABLE语句添加外键约束。
执行查询
executeQuery方法使用PDO实例执行生成的SQL查询。
查询构建器
Maestro为常见的SQL操作提供了查询构建器类:Select、Insert、Update和Delete。
选择
Select类允许您构建和执行SELECT查询。
use Ilias\Maestro\Database\Select; use Ilias\Maestro\Database\PDOConnection; $select = new Select(PDOConnection::getInstance()); $select->from(['u' => 'users'], ['u.id', 'u.name']) ->where(['u.active' => true]) ->order('u.name', 'ASC') ->limit(10); $sql = $select->getSql(); $params = $select->getParameters();
插入
Insert类允许您构建和执行INSERT查询。
use Ilias\Maestro\Database\Insert; use Ilias\Maestro\Database\PDOConnection; use Maestro\Example\User; $user = new User('John Doe', 'john@example.com', md5('password'), true, new Timestamp('now')); $insert = new Insert(PDOConnection::getInstance()); $insert->into(User::class) ->values($user) ->returning(['id']); $sql = $insert->getSql(); $params = $insert->getParameters();
更新
Update类允许您构建和执行UPDATE查询。
use Ilias\Maestro\Database\Update; use Ilias\Maestro\Database\PDOConnection; $update = new Update(PDOConnection::getInstance()); $update->table('users') ->set('name', 'Jane Doe') ->where(['id' => 1]); $sql = $update->getSql(); $params = $update->getParameters();
删除
Delete类允许您构建和执行DELETE查询。
use Ilias\Maestro\Database\Delete; use Ilias\Maestro\Database\PDOConnection; $delete = new Delete(PDOConnection::getInstance()); $delete->from('users') ->where(['id' => 1]); $sql = $delete->getSql(); $params = $delete->getParameters();
示例
定义模式和表
<?php namespace Maestro\Example; use Ilias\Maestro\Abstract\Schema; use Ilias\Maestro\Abstract\Table; use Ilias\Maestro\Abstract\PostgresFunction; use Ilias\Maestro\Types\Timestamp; final class Hr extends Schema { public User $user; } final class User extends Table { public Hr $schema; public string $username; public string $email; public string $password; public Timestamp | PostgresFunction | string $createdIn = "CURRENT_TIMESTAMP"; public function __construct( string $username, string $email, string $password, Timestamp $createdIn ) { $this->username = $username; $this->email = $email; $this->password = $password; $this->createdIn = $createdIn; } public static function tableUniqueColumns(): array { return ["username", "email"]; } }
说明
final:使用final指令声明您的Table、Schema和Database类。这是应用程序跟踪创建实体的方式。type:声明所有类属性的类型,以便应用程序可以从数据库列更好地选择等效的数据类型。__construct:构造方法用于定义数据库列的非空性。将必须非空的列添加到构造函数参数中。default:要声明默认值,只需将初始值添加到类属性中即可。自定义函数:要将PostgreSQL函数用作默认值,请遵循前面的步骤,并在属性类型中添加以下两个类型:<当前类型> | PostgresFunction | string,然后添加为值文本将用作函数。唯一:重写tableUniqueColumns静态方法以返回唯一列的名称。或者,在属性的文档中使用@unique子句,但请注意,如果重写了tableUniqueColumns,则这不会起作用。
生成SQL查询
您的文件通常应包括以下变量
- DB_SQL:PHP数据源驱动程序名称。
- DB_HOST:您的数据库服务器的主机名。
- DB_PORT:您的数据库服务器正在运行的端口号。
- DB_NAME:您想要连接到的数据库名称。
- DB_USER:用于连接到数据库的用户名。
- DB_PASS:用于连接到数据库的密码。
以下是为您的.env文件需要的内容
DB_SQL=pgsql
DB_HOST=localhost
DB_PORT=5432
DB_NAME=maestrodb
DB_USER=postgres
DB_PASS=dbpass
<?php require_once 'vendor/autoload.php'; use Ilias\Maestro\Database\DatabaseManager; use Ilias\Maestro\Database\PDOConnection; use Maestro\Example\Hr; use PDO; // Initialize PDO with environment variables $pdo = PDOConnection::getInstance(); // Initialize DatabaseManager $dbManager = new DatabaseManager($pdo); // Create schemas and tables based on the defined classes $queries = $dbManager->createTablesForSchema(new Hr()); foreach ($queries as $query) { $dbManager->executeQuery($pdo, $query); }
命令
Maestro提供了一些命令来帮助您管理和同步您的数据库模式。以下是可用的命令
sync-schema
同步特定模式类的模式。此命令确保指定的类的数据库模式与您在PHP代码中定义的模式匹配。
用法
./vendor/bin/maestro sync-schema <SchemaClass>
示例
./vendor/bin/maestro sync-schema Maestro\\Example\\Hr
此命令将同步Hr模式,确保数据库中Hr模式的表和列与PHP代码中的定义匹配。
sync-database
同步指定数据库类的整个数据库模式。此命令遍历数据库类中定义的所有模式,并确保数据库中的每个模式都与您在PHP代码中定义的模式匹配。
用法
./vendor/bin/maestro sync-database <DatabaseClass>
示例
./vendor/bin/maestro sync-database Maestro\\Example\\MaestroDb
此命令将同步MaestroDb类中定义的所有模式,确保每个数据库中的表和列与PHP代码中的定义匹配。