repo2/query-builder

此包已被弃用且不再维护。未建议替代包。

QueryBuilder 是一个针对 PHP 5.4+ 编写的 MySQL 兼容查询的快速编译器。

v1.3 2015-01-22 10:45 UTC

This package is not auto-updated.

Last update: 2020-09-15 18:52:56 UTC


README

Build Status Latest Stable Version Total Downloads License Scrutinizer Code Quality Code Coverage

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

目录

  1. 安装
  2. DDL
  3. 查询
  4. 限制

安装

使用 Composer 安装

{
    "require": {
        "repo2/query-builder": "*"
    }
}

DDL

DDL 包装器位于 Repo2\QueryBuilder\DDL 命名空间。

创建

function DDL\create(string $table, array $columns)

返回 \Repo2\QueryBuilder\DDL\CreateTable

示例

代码

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)

返回 \Repo2\QueryBuilder\DDL\DropTable

示例

代码

use Repo2\QueryBuilder\DDL;

$query = DDL\drop('user');

将被编译为

DROP TABLE `user`

查询

CRUD 包装器位于 Repo2\QueryBuilder 命名空间。

插入

function QueryBuilder\insert(string $table, array $firstRow = [])

返回 \Repo2\QueryBuilder\Query\InsertQuery

示例

代码

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)

返回 \Repo2\QueryBuilder\Query\SelectQuery

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)

返回 \Repo2\QueryBuilder\Query\UpdateQuery

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)

返回 \Repo2\QueryBuilder\Query\DeleteQuery

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 驱动。

来源:https://github.com/Repo2/query-builder