arekx/pql

PHP 查询构建器

1.0.0 2024-09-01 18:59 UTC

This package is auto-updated.

Last update: 2024-09-01 19:04:11 UTC


README

Scrutinizer Code Quality Code Coverage Build Status Code Intelligence Status Documentation Status

PHP 数据库查询库

此库是一个数据库抽象层,它将查询命令(选择、删除、更新等)从驱动程序(MySQL、Postgres、SQL Server等)中抽象出来。查询以优雅的方式定义,允许你编写几乎所有的查询,而无需依赖传递原始查询数据。

安装

通过 composer 安装此库,使用命令 composer install arekxv/pql(仍在进行中)

使用方法

首先,你需要决定将使用哪个驱动程序。以下驱动程序受到支持

在决定驱动程序后,编写查询就像

use function \ArekX\PQL\Sql\{select, all, equal, column, value};

// ... driver and builder initialization left out for brevity.

/** @var \ArekX\PQL\Contracts\Driver $driver */
/** @var \ArekX\PQL\Contracts\QueryBuilder $builder */

$runner = QueryRunner::create($driver, $builder);

// Fetching all results

$query = select('*') // or Select::create()->columns('*') if you do not want to use functions.
    ->from('user')
    ->where(all(['is_active' => 1]));

// Built query equals to: SELECT * FROM `user` WHERE `is_active` = 1;
$runner->fetchAll($query); // Returns all data for user table


// Complex select query:
$query = select('*')
    ->from(['u' => 'user'])
    ->innerJoin(['r' => 'user_role'], 'u.role_id = r.id')
    ->where(['all', [
         'u.is_active' => 1,
         'r.id' => select('role_id')
                    ->from('application_roles')
                    ->where(equal(column('application_id'), value(2)))
      ]);
/* 
Built query equals to:
SELECT 
    * 
FROM `user` AS `u`
INNER JOIN `user_role` AS `r` ON u.role_id = r.id
WHERE
 `u`.`is_active` = 1
 AND `r`.`id` IN (
    SELECT `role_id` FROM `application_roles` WHERE `application_id` = 2
 )
*/
$runner->fetchAll($query); // Returns all data for this query

文档

文档可在此处(在文档文件夹中)找到。

文档的 HTML 版本可在这里找到。

测试

运行 composer install,然后运行 composer test。这将运行单元测试和集成测试。

对于集成测试,数据库 docker 容器必须正在运行,否则那些测试将失败。

要设置 docker 容器,请安装 docker 并在 tests 文件夹中运行 docker-compose up -d

要仅运行单元测试,请运行 composer test-unit

要运行覆盖率报告,请运行 composer coverage 或你可以在这里查看它。

许可证

根据 Apache 许可证第 2.0 版(“许可证”);除非遵守许可证规定或书面同意,否则不得使用此文件。您可以在以下位置获得许可证副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可证管理权限和限制的具体语言,请参阅许可证。