girgias / query-builder
一个用于构建有效 SQL 查询的库
Requires
- php: ^7.3
- girgias/php-enums: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.14
- phpmd/phpmd: ^2.6
- phpunit/phpunit: ^8.0
- squizlabs/php_codesniffer: ^3.3
- vimeo/psalm: ^3.0
This package is auto-updated.
Last update: 2024-09-24 05:13:40 UTC
README
一个流畅的 SQL 查询构建器,它**只**根据请求提供的 SQL 子句构建一个有效的 SQL 查询。
安装
composer require girgias/query-builder
功能
此查询构建器可以使用 ANSI 标准化语法构建各种 SQL 查询,并且与数据库无关。
每种查询类型都有一个自己的类,这些类都继承自基本 Query 类。它们都具有相同的构造函数签名,需要指定要执行查询的表名。
要使用 SelectJoin 类构建带有表连接的 SELECT 查询,下面有一个使用此类的示例。
可以直接将标量值提供给 WHERE 子句和绑定字段。还可以指定将值绑定的命名参数。如果没有提供命名参数,将生成一个随机参数。
要获取带有相关值的命名参数,请使用 getParameters 方法,它将返回一个关联数组 parameter => value。
示例
基本的 SELECT 查询
$query = (new \Girgias\QueryBuilder\Select('demo')) ->limit(10, 20) ->order('published_date') ->getQuery();
将输出
SELECT * FROM demo ORDER BY published_date ASC LIMIT 10 OFFSET 20
更复杂的 SELECT 查询
$start = new \DateTime('01/01/2016'); $end = new \DateTime('01/01/2017'); $query = (new \Girgias\QueryBuilder\Select('demo')) ->select('title', 'slug') ->selectAs('name_author_post', 'author') ->whereBetween('date_published', $start, $end) ->order('date_published', 'DESC') ->limit(25) ->getQuery();
将输出
SELECT title, slug, name_author_post AS author FROM demo WHERE date_published BETWEEN '2016-01-01 00:00:00' AND '2017-01-01 00:00:00' ORDER BY date_published DESC LIMIT 25
使用 whereOr 方法的示例
$query = (new \Girgias\QueryBuilder\Select('demo')) ->where('author', '=', 'Alice', 'author') ->whereOr('editor', '=', 'Alice', 'editor') ->getQuery();
将输出
SELECT * FROM demo WHERE (author = :author OR editor = :editor)
UPDATE 查询示例
$query = (new \Girgias\QueryBuilder\Update('posts')) ->where('id', '=', 1, 'id') ->bindField('title', 'This is a title', 'title') ->bindField('content', 'Hello World', 'content') ->bindField('date_last_edited', (new \DateTimeImmutable()), 'nowDate') ->getQuery();
将输出
UPDATE posts SET title = :title, content = :content, date_last_edited = :now_date WHERE id = :id
带有 INNER JOIN 的 SELECT 查询
$query = (new \Girgias\QueryBuilder\SelectJoin('comments', 'posts')) ->tableAlias('co') ->select('co.user', 'co.content', 'p.title') ->joinTableAlias('p') ->innerJoin('post_id', 'id') ->getQuery();
将输出
SELECT co.user, co.content, p.title FROM comments AS co INNER JOIN posts AS p ON comments.post_id = posts.id
未来范围
可能添加到此库的功能
- WHERE 子查询
贡献
如果您发现了一个不会抛出运行时异常的无效 SQL 名称,或者请将测试用例添加到 tests/CheckSqlNamesTest.php 文件中。
如果您发现了一个此库返回无效 SQL 查询的示例,请将(或修复)测试用例添加到相关的查询测试用例或如果是通用错误,请使用 tests/QueryTest 文件。
如果应该抛出运行时异常,请添加到相关测试文件或如果是针对 SELECT 查询的特定错误,请添加到 tests/SelectThrowExceptionsTest.php 文件中。
如果您想做出贡献,请复制存储库并使用功能分支。拉取请求非常欢迎。
注意
在做出贡献时,请确保 Psalm 运行无误并且所有单元测试通过。此外,如果您添加了功能,请添加相应的单元测试,至少覆盖 90% 的代码,并且这些测试覆盖任何存在的边缘情况。
链接
- 存储库:https://github.com/girgias/query-builder/
- 问题跟踪器:https://github.com/girgias/query-builder/issues
- 在敏感错误的情况下,如安全漏洞,请直接联系 george.banyard@gmail.com,而不是使用问题跟踪器。
许可
此项目中的代码根据 MIT 许可证授权。