repo2 / query-builder
此包已被弃用且不再维护。未建议替代包。
QueryBuilder 是一个针对 PHP 5.4+ 编写的 MySQL 兼容查询的快速编译器。
v1.3
2015-01-22 10:45 UTC
Requires
- php: >=5.4
This package is not auto-updated.
Last update: 2020-09-15 18:52:56 UTC
README
QueryBuilder 是一个针对 PHP 5.4+ 编写的 MySQL 兼容查询的快速编译器。其语法比其他已知库更为声明式和简洁。编译器是一个微框架,仅用于 PHP 开发,无需编写纯 SQL。
use Repo2\QueryBuilder; // build a query $query = QueryBuilder\select('user', [ 'id', QueryBuilder\alias('timezone', 'tz') ]) ->where( QueryBuilder\greater('age', 21), QueryBuilder\orWhere( QueryBuilder\equal('city', 'New York'), QueryBuilder\isNotNull('country') ) ) ->orderBy( QueryBuilder\orderByDesc('created_at'), QueryBuilder\orderByAsc('age') ) ->limit(20); // compile & run sql $conn = new \mysqli('localhost', 'root', '', 'test'); $sql = $query->compile(new Driver\Mysqli($conn)); $conn->query($sql);
查询将被编译为
SELECT `id`, `timezone` AS `tz` FROM `user` WHERE (`age` > "21" AND (`city` = "New York" OR `country` IS NOT NULL)) ORDER BY `created_at` DESC, `age` ASC LIMIT 20
框架的核心是可扩展性。您可以创建自己的查询。您只需要实现ExpressionInterface
。
目录
安装
使用 Composer 安装
{ "require": { "repo2/query-builder": "*" } }
DDL
DDL 包装器位于 Repo2\QueryBuilder\DDL
命名空间。
创建
function DDL\create(string $table, array $columns)
示例
代码
use Repo2\QueryBuilder\DDL; $query = DDL\create('user', [ DDL\column('id')->integer()->primary(), DDL\column('name')->varchar(50)->required(), DDL\column('timezone')->varchar(100)->defval('UTC') ]);
将被编译为
CREATE TABLE `user`( `id` INTEGER PRIMARY KEY, `name` VARCHAR(50) NOT NULL, `timezone` VARCHAR(100) DEFAULT "UTC" )
删除
function DDL\drop(string $table)
示例
代码
use Repo2\QueryBuilder\DDL; $query = DDL\drop('user');
将被编译为
DROP TABLE `user`
查询
CRUD 包装器位于 Repo2\QueryBuilder
命名空间。
插入
function QueryBuilder\insert(string $table, array $firstRow = [])
示例
代码
use Repo2\QueryBuilder; $query = QueryBuilder\insert('something', ['foo' => 1, 'bar' => 2]);
将被编译为
INSERT INTO `something`(`foo`, `bar`) VALUES ("1", "2")
您也可以创建 多插入 语句。代码
use Repo2\QueryBuilder; $query = QueryBuilder\insert('something') ->pipe(['foo' => 1, 'bar' => 2]) ->pipe(['foo' => 3, 'bar' => 4]);
将被编译为
INSERT INTO `something`(`foo`, `bar`) VALUES ("1", "2"), ("3", "4")
选择
function QueryBuilder\select(string $table, array $columns)
SelectQuery
继承自 FilterQuery
。参见 filter。
示例
代码
use Repo2\QueryBuilder; $query = QueryBuilder\select('something', ['foo']);
将被编译为
SELECT `foo` FROM `something`
您可以在列列表中创建 别名。代码
use Repo2\QueryBuilder; $query = QueryBuilder\select( 'something', [ 'foo', QueryBuilder\alias('timezone', 'tz') ] );
将被编译为
SELECT `foo`, `timezone` AS `tz` FROM `something`
更新
function QueryBuilder\update(string $table, array $values)
UpdateQuery
继承自 FilterQuery
。参见 filter。
示例
代码
use Repo2\QueryBuilder; $query = QueryBuilder\update('something', ['foo' => 1, 'bar' => 'baz']);
将被编译为
UPDATE `something` SET `foo` = "1", `bar` = "baz"
您可以使用更新中的值 增量。代码
use Repo2\QueryBuilder; $query = QueryBuilder\update( 'something', [ QueryBuilder\inc('foo', 10), QueryBuilder\inc('bar', -10) ] );
将被编译为
UPDATE `something` SET `foo` = `foo` + 10, `bar` = `bar` - 10
删除
function QueryBuilder\delete(string $table)
DeleteQuery
继承自 FilterQuery
。请参阅 filter。
示例
代码
use Repo2\QueryBuilder; $query = QueryBuilder\delete('something');
将被编译为
DELETE FROM `something`
filter
抽象类 FilterQuery
实现数据过滤、排序和切片。
where
FilterQuery::where(ExpressionInterface ...$conditions)
您可以使用以下表达式方法
- equal
- notEqual
- greater
- greaterOrEqual
- less
- lessOrEqual
- isNull
- isNotNull
- inArray
- notInArray
- orWhere
- andWhere
orderBy
FilterQuery::orderBy(ExpressionInterface ...$conditions)
您可以使用以下表达式方法
- orderByAsc
- orderByDesc
limit
FilterQuery::limit(int $limit, int $offset = 0)
限制
该框架有一些限制
- 不支持预处理语句。
- 不支持连接。
- 不支持子查询。
- 不允许使用查询
SELECT * FROM
。 - 仅实现
mysqli
驱动。