o-log/php-db

此软件包最新版本(0.18)没有可用的许可证信息。

数据库

0.18 2018-09-26 10:21 UTC

This package is auto-updated.

Last update: 2024-08-29 04:37:39 UTC


README

该库的主要功能包括

  • 具有 CLI、Web 和程序界面的迁移引擎

  • "表空间" 允许每个应用程序拥有多个数据库,同时也允许 composer 模块使用数据库并进行迁移

  • 连接器和表空间是单独声明和配置的,这有助于轻松覆盖数据库配置

  • 基于 PDO 的轻量级包装,自动连接到服务器

连接器和空间

空间是一组表,这些表位于同一数据库中并一起使用。应用程序可能包含多个模块,每个模块都有自己的表空间或多个空间。例如,php-auth 模块使用 SPACE_PHPAUTH。

每个空间必须分配给应用程序配置中的一个连接器(数据库连接)。所有空间可以共享同一连接,也可以位于不同的数据库和不同的数据库服务器上。

连接器和空间配置示例

class CommonConfig
{
    const CONNECTOR_DBDEMO = 'CONNECTOR_DBDEMO';
    const SPACE_DBDEMO = 'SPACE_DBDEMO';

    static public function init(){
        DBConfig::setConnector(
            self::CONNECTOR_DBDEMO,
            new ConnectorMySQL('127.0.0.1', 'dbdemo', 'root', '1234')
        );
        
        DBConfig::setSpace(
            self::SPACE_DBDEMO,
            new Space(self::CONNECTOR_DBDEMO, __DIR__ . '/../dbdemo.sql')
        );
    }
}

现实世界应用程序通常具有通用配置,该配置适用于所有实例,以及一些实例配置 - 开发、测试、生产等。

通用配置存储在应用程序存储库中,而实例配置存储在每个实例的本地,并包含在 .gitignore 文件中。

实例配置扩展并覆盖通用配置

class Config
{
    static public function init(){
        CommonConfig::init();
        
        DBConfig::setConnector(self::CONNECTOR_DBDEMO, new ConnectorMySQL('production.db.host', 'dbdemo', 'demouser', 'some_strong_password'));
    }
}

应用程序在入口点内部应用配置,如下所示

\Config\Config::init();

数据库操作

当执行给定连接器的第一次查询时,将自动建立数据库连接。因此,大多数页面可以在不连接到数据库的情况下生成 - 所有数据通常来自缓存。

基本数据库方法位于 DB 类中

static public function readColumn($space_id, $query, $params_arr = array())

从单列读取值到数组。

static public function query($space_id, $query, $params_arr = array())

执行查询并返回 PDO 语句对象。可用于非选择查询(插入、更新等)。

static public function readObject($space_id, $query, $params_arr = array())

将单个数据库记录读取到 stdClass 对象中。

static public function readObjects($space_id, $query, $params_arr = array(), $field_name_for_keys = '')

用于从数据库中读取多条记录到 stdClass 对象数组中。

每个方法都接收数据库空间 ID、带有参数占位符的查询字符串和参数值数组。

迁移

迁移由 vendor/bin/migrate 工具执行。

一个空间的所有迁移存储在单个文件中,每行一个 SQL 查询。迁移文件名传递给空间配置。

查询将按照它们在文件中的顺序执行。您可以使用 php-model 工具创建迁移,或手动编写迁移。

事务

正确的事务只能在单个数据库连接中进行,因此您只能在具有相同连接器的空间之间使用事务和外键。

例如,如果您的应用程序模型从 php-auth 引用 User 模型 - 您必须将相同的连接器分配给您的应用程序表空间和 php-auth 表空间。

使用模块和配置多个空间

每个与数据库一起工作的模块都有自己的表空间 ID 和迁移文件。您必须配置模块的相应空间才能使其工作。

    DBConfig::setConnector(self::CONNECTOR_DEMO, new ConnectorMySQL('127.0.0.1', 'phpstorage', 'root', '1234'));

    DBConfig::setSpace(AuthConfig::SPACE_PHPAUTH, new Space(self::CONNECTOR_DEMO, __DIR__ . '/../vendor/o-log/php-auth/db_phpauth.sql'));
    DBConfig::setSpace(StorageConstants::SPACE_PHPSTORAGE, new Space(self::CONNECTOR_DEMO, __DIR__ . '/../db_phpstorage.sql'));

必须在应用程序空间之前注册模块空间,以便迁移器首先创建模块表,然后创建应用程序表,这对于应用程序表可能引用模块表非常重要。