lucinda/queries

根据官方标准或其供应商特定的派生生成的 SQL 语句的 API

v3.0.3 2022-06-11 15:04 UTC

README

目录

关于

此 API 的目的是根据 SQL 标准或其供应商特定的派生自动化生成 SQL 语句(查询)。API 完全符合 PSR-4 标准,仅需要 PHP 8.1+ 解释器。要快速了解其工作原理,请查看

  • 安装:描述如何在您的计算机上安装 API
  • 单元测试:API 具有百分之百的单元测试覆盖率,使用 UnitTest API 而不是 PHPUnit 以获得更大的灵活性
  • 示例:显示 API 功能示例

内部所有类都使用 Lucinda\Query 命名空间!

安装

要安装此 API,您只需进入项目根目录,然后在控制台运行此命令

composer require lucinda/queries

安装完成后,您就可以生成查询。每个标准 SQL 语句对应一个或多个类

  • SELECT:
    • Lucinda\Query\Select:封装单个 SELECT 语句(例如:SELECT id FROM table)
    • Lucinda\Query\SelectGroup:封装由 SET 操作符连接的 SELECT 语句组(例如:(SELECT id FROM table1)UNION(SELECT id FROM table2))
  • INSERT:
    • Lucinda\Query\Insert:封装 INSERT INTO ... VALUES 语句(例如:INSERT INTO table (id, name) VALUES (1, 'asd')
    • Lucinda\Query\InsertSelect:封装 INSERT INTO ... SELECT 语句(例如:INSERT INTO table (id, name) SELECT id, name FROM table2)
  • UPDATE:
    • Lucinda\Query\Update:封装 UPDATE 语句(例如:UPDATE users SET name='Lucian' WHERE id=18)
  • DELETE:
  • TRUNCATE:

对于实现 SQL 标准的每个供应商,您可以使用上述内容或其供应商特定的派生。MySQL 供应商已支持

以上每个或单独调用的子句都实现\Stringable,该实现通过__toString()方法将语句/子句转换为SQL。

单元测试

有关测试和示例,请检查API源代码中的以下文件/文件夹

注意:超全局函数__toString()(由语句和子句使用)通过toString()单元测试方法进行测试。由于返回类型为字符串而不是Result,因此它们不能通过单元测试进行镜像,所以它们将给出:无效的单元测试响应

示例

要查看每个类如何使用的示例,请检查teststests_drivers文件夹中的单元测试!简单示例

$statement = new \Lucinda\Query\Select("users", "t1");
$statement->fields(["t3.name"]);
$statement->joinInner("user_departments", "t2")->on(["t1.id"=>"t2.user_id"]);
$statement->joinInner("departments", "t3")->on(["t2.department_id"=>"t3.id"]);
$statement->where(["t1.id"=>":id"]);
$statement->orderBy(["t3.name"]);

封装

SELECT t3.name
FROM users AS t1
INNER JOIN user_departments AS t2 ON t1.id = t2.user_id
INNER JOIN departments AS t3 ON t2.department_id = t3.id
WHERE t1.id = :id
ORDER BY t3.name

参考指南

Select类

Lucinda\Query\Select通过以下公共方法封装标准的SELECT语句

SelectGroup类

Lucinda\Query\SelectGroup通过以下公共方法封装由SET运算符(例如:UNION)连接的SELECT语句列表

Insert类

Lucinda\Query\Insert通过以下公共方法封装标准的INSERT INTO VALUES语句

InsertSelect类

Lucinda\Query\InsertSelect通过以下公共方法封装标准的INSERT INTO SELECT语句

Update类

Lucinda\Query\Update 通过以下公共方法封装了标准的 UPDATE 语句

类 Delete

Lucinda\Query\Delete 通过以下公共方法封装了标准的 DELETE 语句

类 Truncate

Lucinda\Query\Truncate 通过以下公共方法封装了标准的 TRUNCATE 语句

类 MySQL Select

Lucinda\Query\Vendor\MySQL\SelectLucinda\Query\Select 的基础上通过以下额外方法封装了 MySQL SELECT 语句

除了上述操作外,还可以使用 where 方法

类 MySQL Insert

Lucinda\Query\Vendor\MySQL\InsertLucinda\Query\Insert 的基础上通过以下额外方法封装了 MySQL INSERT INTO VALUES 语句

类 MySQL InsertSelect

Lucinda\Query\Vendor\MySQL\InsertSelectLucinda\Query\InsertSelect 的基础上通过以下额外方法封装了 MySQL INSERT INTO SELECT 语句

类 MySQL InsertSet

Lucinda\Query\Vendor\MySQL\InsertSet 通过以下公共方法封装了 MySQL INSERT INTO SET 语句

类 MySQL Replace

Lucinda\Query\Vendor\MySQL\ReplaceLucinda\Query\Insert 的基础上封装了 MySQL REPLACE INTO VALUES 语句,没有额外的公共方法,只是将 INSERT 替换为 REPLACE。

类 MySQL ReplaceSelect

Lucinda\Query\Vendor\MySQL\ReplaceSelectLucinda\Query\InsertSelect 的基础上封装了 MySQL REPLACE INTO SELECT 语句,没有额外的公共方法,只是将 INSERT 替换为 REPLACE。

类 MySQL ReplaceSet

Lucinda\Query\Vendor\MySQL\ReplaceSet 通过以下公共方法封装了 MySQL REPLACE INTO SET 语句

类 MySQL Update

Lucinda\Query\Vendor\MySQL\UpdateLucinda\Query\Update 的基础上通过以下额外方法封装了 MySQL UPDATE 语句

除了上述操作外,还可以使用 where 方法

类 MySQL Delete

Lucinda\Query\Vendor\MySQL\DeleteLucinda\Query\Delete 的基础上通过以下额外方法封装了 MySQL DELETE 语句

除了上述操作外,还可以使用 where 方法