makinacorpus / query-builder
无驱动SQL查询构建器。
Requires
- php: >=8.1
- symfony/polyfill-php83: ^1.29
Requires (Dev)
- doctrine/dbal: ^3.7|^4.0
- friendsofphp/php-cs-fixer: ^3.40
- phpbench/phpbench: ^1.2
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.3
- ramsey/uuid: >=3.8
- symfony/uid: >=6.0
Conflicts
- doctrine/dbal: <3.7
- dev-main
- 1.6.1
- 1.6.0
- 1.5.5
- 1.5.4
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.0
- 1.3.3
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.0
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.2
- 1.0.1
- 1.0.0
- 0.3.1
- 0.3.0
- 0.2.2
- 0.2.1
- 0.2.0
- 0.1.10
- 0.1.9
- 0.1.8
- 0.1.7
- 0.1.6
- 0.1.5
- 0.1.4
- 0.1.3
- 0.1.2
- 0.1.1
- 0.1.0
- dev-no-issue-bridge-factory
- dev-types
- dev-issue-8-interval
- dev-no-issue-schema-manager
This package is auto-updated.
Last update: 2024-09-13 09:24:54 UTC
README
这是一个具有高级SQL语言功能的驱动无关SQL查询构建器。
默认情况下,它生成(几乎)符合SQL标准的查询,几乎是因为我们支持的所有SQL方言中都没有实现某些SQL功能,在这种情况下,我们实现了自定义变体。
它基于流畅的API,这使得基本的SELECT、DELETE、INSERT、UPDATE和MERGE查询易于编写,即使你并不真正了解SQL。
在任何地方,用户都可以注入原始SQL以避免查询构建器本身的限制。
这个API本身只是一个SQL字符串生成器,为了透明地使用它,提供了一些桥梁
doctrine/dbal:^3
桥接器和查询构建器,- 很快就会有
doctrine/dbal:^4
桥接器和查询构建器, PDO
桥接器和查询构建器,- Symfony扩展集成了
doctrine/doctrine-bundle
,可在makinacorpus/query-builder-bundle包中获取。
入门指南
概览 支持的SQL功能列表。
查看官方支持的供应商方言。
非详尽的特性列表
- 公共表表达式:
WITH "foo" AS (SELECT ...)
- VALUES / 常量表表达式:
WITH "foo" ("col1", "col2") AS (SELECT VALUES ...)
SELECT VALUES ... AS ("col1", "col2")
JOIN (VALUES ...) AS "foo"
, ...
- 聚合函数过滤器:
- 标准SQL:
SELECT SUM(foo) FILTER (WHERE <condition>)
- 不支持RDBMS的模拟:
SELECT SUM(CASE WHEN <condition> THEN foo END)
- 标准SQL:
- 窗口函数:
SELECT SUM(foo) OVER (PARTITION BY... ORDER BY...)
SELECT SUM(foo) OVER (bar) FROM baz WINDOW bar AS (PARTITION BY... ORDER BY...)
- RETURNING/OUTPUT:
- PostgreSQL:
UPDATE foo SET ... RETURNING foo, bar, baz
- SQL Server:
UPDATE foo SET ... OUTPUT DELETED.col1, INSERTED.col1
- PostgreSQL:
- 复杂的WHERE条件构建器
- CASE WHEN ... THEN ... END
- IF THEN 使用CASE ... WHEN模拟
- 数组表达式:
ARRAY[? ,? ?]
- 行表达式:
- 标准SQL:
ROW('foo', 2, ...)
- PostgreSQL复合类型:
ROW('foo', 2, ...)::some_composite_type
- 标准SQL:
- 混合复杂的数据结构:
CAST(ROW('foo', CAST(ARRAY[1,2,3] AS bigint[])) AS some_composite_type)
- CAST表达式:
- 标准SQL:
CAST(expression AS type)
- PostgreSQL:
expression::type
- 标准SQL:
- LIKE / SIMILAR TO
foo LIKE '%somevalue%'
foo SIMILAR TO '%somevalue%'
- 更新FROM JOIN
- INSERT INTO ... VALUES ...
- INSERT INTO ... SELECT ...
- 用户在所有地方都可以使用任意原始SQL
- 构建器不支持某些X或Y高级功能或特定方言,那么就编写自己的SQL。
- 在每个地方标识符的转义
- 用户值转换为SQL
构建文档
文档使用VitePress编写。
为读者
cd ./docs/ nvm use npm ci npm run docs:build <your browser> ./.vitepress/dist/index.html
为开发者
cd ./docs/
nvm use
npm ci
npm run docs:dev
运行测试
大多数单元测试可以通过直接运行PHPUnit顺利运行
composer install vendor/bin/phpunit
为了运行桥梁集成测试,需要一个包含一些正在运行的数据库的完整环境,为此提供了一个使用 docker compose
的脚本,但在所有环境中可能无法优雅地工作。
composer install ./run-tests.sh
请理解,测试环境目前处于原型阶段,并且将保持原样,直到配置好github actions CI。
历史
此API几乎是一个全新的重写,保留了基本设计,使用了现代PHP >= 8.2功能,并对来自 makinacorpus/goat-query
包的查询构建器进行了更多单元测试。
其原因是我们在过去几年中深度使用 makinacorpus/goat-query
作为我们主要的数据库访问层,但现在我们正转向使用更常用的工具来支持未来的项目。
Doctrine DBAL查询构建器可以做你想要做的任何事情,但它的API不直观,使用它的代码难以阅读。此外,它没有实现现代SQL语言功能,因为它的目标主要是为大量RDBMS提供最低的共同基数。