finesse / query-scribe
轻量级 SQL 查询构建器,专为可扩展性和灵活性而设计
v0.9.3
2019-01-19 03:47 UTC
Requires
- php: >=7.0
Requires (Dev)
- phpunit/phpunit: ^6.4
README
提供方便的对象语法来构建 SQL 查询。将查询编译为带绑定值的 SQL 文本。不执行数据库查询。
$query = (new Query) ->from('posts') ->where('level', '>', 3) ->whereIn('category_id', function ($query) { $query ->addSelect('id') ->from('categories') ->where('categories.name', 'Interesting'); }) ->where(new Raw('MONTH(date)'), 4) ->orderBy('date', 'desc') ->limit(10); $prefixer = new TablePrefixer('demo_'); $grammar = new MySQLGrammar(); $compiled = $grammar->compile($query->apply($prefixer)); echo $compiled->getSQL(); /* SELECT * FROM `demo_posts` WHERE `level` > ? AND `category_id` IN ( SELECT `id` FROM `demo_categories` WHERE `demo_categories`.`name` = ? ) AND (MONTH(date)) = ? ORDER BY `date` DESC LIMIT ? */ echo $compiled->getBindings(); /* [3, 'Interesting', 4, 10] */
要对数据库执行编译后的查询,请使用数据库连接器,如 PDO、MicroDB 或 DBAL,或使用现成的数据库抽象,如 MiniDB 或 Wired。
关键特性
- 构建器只有一个职责:构建 SQL。
- 设计用于进一步扩展。您可以在其上构建数据库工具或 ORM 而不会遇到主要问题。示例将很快提供。
- 非常灵活。您几乎可以在任何地方传递原始 SQL 或子查询(请参阅代码中的 PHPDoc 注释以了解可以传递的位置)。
- 智能表前缀,考虑表别名(在原始表达式中不起作用)。
- 所有值都进入绑定,即使是子查询中的值。
- 无依赖项。仅需要 PHP ≥ 7。
支持的 SQL 语法
- MySQL
- SQLite
SQL Server(不支持完整)- 可能任何其他,尚未测试
如果需要语法支持,请扩展 CommonGrammar
类并创建一个拉取请求。
文档
文档可在 queryscribe.readthedocs.io 查找。
此外,代码中的所有类、方法和属性都有 PHPDoc 注释。
版本兼容性
项目遵循 语义版本控制。
许可证
MIT。有关详细信息,请参阅 LICENSE 文件。