hindbiswas / quebee
Qb - 轻量级SQL查询构建器
Requires
- php: >=8.1
Requires (Dev)
- phpunit/phpunit: ^10.3
README
███████╗ ██╗ ██╗███████╗ ...vvvv)))))).
██╔═══██╗██║ ██║██╔════╝ /~~\ ,,,c(((((((((((((((((/
██║██╗██║██║ ██║█████╗ /~~c \. .vv)))))))))))))))))))\``
███████╔╝██║ ██║██╔══╝ G_G__ ,,(((KKKK//////////////'
╚═██╔═╝ ╚██████╔╝███████╗ ,Z~__ '@,gW@@AKXX~MW,gmmmz==m_.
╚═╝ ╚═════╝ ╚══════╝ iP,dW@!,A@@@@@@@@@@@@@@@A` ,W@@A\c
██████╗ ███████╗███████╗ ]b_.__zf !P~@@@@@*P~b.~+=m@@@*~ g@Ws.
██╔══██╗██╔════╝██╔════╝ ~` ,2W2m. '\[ ['~~c'M7 _gW@@A`'s
██████╦╝█████╗ █████╗ v=XX)====Y- [ [ \c/*@@@*~ g@@i
██╔══██╗██╔══╝ ██╔══╝ /v~ !.!. '\c7+sg@@@@@s.
██████╦╝███████╗███████╗ // 'c'c '\c7*X7~~~~
╚═════╝ ╚══════╝╚══════╝ ]/ ~=Xm_ '~=(Gm_.
简介
QᴜᴇᴇBᴇᴇ (QB) 或查询构建器包是一个用于构建MySQL查询的轻量级包。它是一个PHP包,简化了SQL查询的构建。它提供了一个面向对象的构建SQL查询的方法,使在PHP应用程序中创建、修改和执行SQL语句变得更加容易。
安装
1. Composer
QueBee可以通过Composer安装,这是一个PHP依赖管理器。如果您还没有安装Composer,请访问Composer的网站获取说明。
运行以下命令安装QueBee
composer require hindbiswas/quebee
2. 自动加载
确保Composer的自动加载器已包含在您的PHP项目中。使用您的路径代替path/to/
require_once __DIR__ . DIRECTORY_SEPARATOR . 'path/to' . '/vendor/autoload.php';
功能
QueBee提供了以下功能,以与MySQL一起工作
- 查询:用于
SELECT
、INSERT
、UPDATE
和DELETE
查询的Query
类。 - 表:用于
CREATE TABLE
的Table
类,以及用于列的Col
类。 - 列:
Col
类提供一系列数据类型,如INT
、VARCHAR
、DATETIME
等,以创建满足您需求的列。 - 语句:用于
UNION
、UNION ALL
、CUBE
、SET
和GROUPING SETS
语句的Stmt
类。
它还包括外键约束、唯一性、主键和索引以及分组。请参阅/tests/
目录以了解所有可能的QueBee使用方式;
用法
以下是每个查询构建器使用的示例。
1. SELECT查询
要创建一个SELECT
查询,请使用Query::select()
方法
use Hindbiswas\QueBee\Query; $aliased_cols = ['alias1' => 'column1', 'alias2' => 'column2', 'column3' => 'column3']; $query = Query::select($aliased_cols)->from('table')->build(); // Resulting SQL query // SELECT column1 AS alias1, column2 AS alias2, column3 AS column3 FROM table;
或者,
use Hindbiswas\QueBee\Query; $query = Query::select(['column1', 'column2']) ->from('table') ->where('column1', 'value') ->orderBy('column2', 'desc') ->limit(10) ->build(); // Resulting SQL query // SELECT column1, column2 FROM table WHERE column1 = 'value' ORDER BY column2 DESC LIMIT 0, 10;
条件别名用于条件语句
您可以使用文字或符号。
2. INSERT查询
要创建一个INSERT
查询,请使用Query::insert()
方法(要一次性插入多行,请使用Query::insertMultiple()
方法)
use Hindbiswas\QueBee\Query; $data = ['column1' => 'value1', 'column2' => 'value2']; $query = Query::insert($data) ->into('table') ->build(); // Resulting SQL query // INSERT INTO table (column1, column2) VALUES ('value1', 'value2');
3. UPDATE查询
要创建一个UPDATE
查询,请使用Query::update()
方法
use Hindbiswas\QueBee\Query; $data = ['column1' => 'new_value1', 'column2' => 'new_value2']; $query = Query::update('table') ->set($data) ->where('column1', 'value1') ->build(); // Resulting SQL query // UPDATE table SET column1 = 'new_value1', column2 = 'new_value2' WHERE column1 = 'value1';
4. DELETE查询
要创建一个DELETE
查询,请使用Query::delete()
方法
$query = Query::delete('table')->where('column1', 1, 'gt')->build() // Here `gt` is alias for `>` // Resulting SQL query // DELETE FROM table WHERE column1 > '1';
5. CREATE TABLE查询
要创建一个CREATE TABLE
查询,请使用Table::create()
方法
无任何外键
use Hindbiswas\QueBee\Col; use Hindbiswas\QueBee\Table; use Hindbiswas\QueBee\Table\Values\DefaultVal; $usersTable = Table::create('users')->columns([ 'id' => Col::integer(11)->unsigned()->pk()->ai(), 'username' => Col::varchar()->unique(), 'email' => Col::varchar()->unique(), 'password' => Col::varchar(), 'is_superadmin' => Col::integer(2)->default('0'), 'create_time' => Col::dateTime()->default(DefaultVal::CURRENT_TIME), 'update_time' => Col::dateTime()->setOnUpdate()->default(DefaultVal::CURRENT_TIME), ]); $query = $usersTable->build(); // Resulting SQL query // CREATE TABLE IF NOT EXISTS users (`id` INT(11) UNSIGNED NULL AUTO_INCREMENT, `username` VARCHAR(255) NOT NULL, `email` VARCHAR(255) NOT NULL, `password` VARCHAR(255) NOT NULL, `is_superadmin` INT(2) NOT NULL DEFAULT '0', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` DATETIME on update CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT users_PK PRIMARY KEY (id), CONSTRAINT username_UC UNIQUE (`username`), CONSTRAINT email_UC UNIQUE (`email`)) ENGINE = InnoDB;
带外键
use Hindbiswas\QueBee\Col; use Hindbiswas\QueBee\Table; use Hindbiswas\QueBee\Table\Values\DefaultVal; use Hindbiswas\QueBee\Table\Values\FK; // $usersTable = create a table to constrain with $table = Table::create('tokens')->columns([ 'id' => Col::integer()->unsigned()->pk()->ai(), 'selector' => Col::varchar(), 'hashed_validator' => Col::varchar(), 'user_id' => Col::integer(11)->unsigned(), 'expiry' => Col::dateTime(), ])->foreign('user_id')->onDelete(FK::CASCADE)->reference($usersTable, 'id'); // Resulting SQL query // CREATE TABLE IF NOT EXISTS tokens (`id` INT UNSIGNED NULL AUTO_INCREMENT, `selector` VARCHAR(255) NOT NULL, `hashed_validator` VARCHAR(255) NOT NULL, `user_id` INT(11) UNSIGNED NOT NULL, `expiry` DATETIME NOT NULL, CONSTRAINT tokens_PK PRIMARY KEY (id), FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE) ENGINE = InnoDB;
v1.2.0
版本中可用的数据类型
- 字符串
- TEXT =>
Col::text()
- VARCHAR =>
Col::varchar(225)
- TEXT =>
- 数字
- BIT =>
Col::bit()
- INT =>
Col::integer()
- BIGINT =>
Col::bigInt()
- MEDIUMINT =>
Col::mediumInt()
- SMALLINT =>
Col::smallInt()
- TINYINT =>
Col::tinyInt()
- DECIMAL =>
Col::decimal(11, 6)
- FLOAT =>
Col::float(6, 2)
- DOUBLE =>
Col::double(11, 6)
- REAL =>
Col::real(11, 6)
- BIT =>
- 时间
- DATE =>
Col::date()
- DATETIME =>
Col::dateTime()
- DATE =>
最佳实践
以下是使用QueBee时的最佳实践
-
清理用户输入:在将它们用于查询之前,始终清理用户输入。
-
错误处理:适当处理异常,尤其是在构建查询时。QueBee可以为无效的输入或方法调用抛出异常。
-
数据库抽象:考虑在与QueBee一起使用数据库抽象层进行更广泛的数据库交互。
-
代码组织:逻辑地组织代码,将查询构建与执行和结果处理分开。
结论
QueBee简化了PHP中的SQL查询构建,使得构建干净、安全、高效的数据库交互变得更加容易。凭借其流畅的API,它提供了一种用户友好的方式来为各种数据库系统创建SQL查询。
有关更详细的用法和自定义选项,请参阅QueBee的GitHub仓库。
就是这样!您现在可以开始使用QueBee在您的PHP应用程序中构建SQL查询了。