victorium / yaqb
PHP 的另一个查询构建器。简单、愚蠢且完全框架无关。
1.1.3
2016-10-28 12:29 UTC
Requires
- php: >=5.5.0
Requires (Dev)
- phpunit/phpunit: 5.0.*
README
介绍
YAQB 是一个非常简单、愚蠢的实现框架,可以动态创建 SQL 查询字符串和参数。它没有数据库特定的功能,实际上也不会查询数据库。
用例
- 作为另一个自研 ORM 的基础。
- 需要组成许多查询然后批量执行。
- 预先生成已知的静态 CRUD SQL 查询。
- 生成查询,其中相同的查询可能需要以不同的方式查询,例如在 Web 请求中异步查询,在后台脚本或任务中同步查询。相同的查询,但不同的驱动程序运行。
许可
YAQB 中的所有源代码文件均根据包含的 LICENSE.txt 文件中的 MIT 许可协议发布。
安装
Composer
可以使用 composer 安装 YAQB (http://getcomposer.org/)。
安装 composer
$ curl -s https://getcomposer.org/installer | php
使用 composer 将 YAQB 作为依赖项
$ php composer.phar require victorium/yaqb
入门指南
这是一个关于如何开始使用 YAQB 的简单示例
<?php
require PATH_TO_YAQB_SRC . "bootstrap.php";
$builder = \Yaqb\Builder::init();
$builder->select("pointer"); // start a simple select statement
echo $builder->getSql(); // get the SQL
print_r($builder->getParameters()); // get the SQL parameters
功能
YAQB 支持以下 SQL 功能
SELECT
<?php
Builder::init()->select()->column("1+7", "total");
// SELECT 1+7 AS total
Builder::init()->select("pointer");
// SELECT * FROM pointer
Builder::init()->select("pointer", "id, b");
// SELECT id, b FROM pointer
Builder::init()->select("pointer")->where("id", 4);
// SELECT * FROM pointer WHERE (id=:id_0)
Builder::init()->select("pointer")->where("id", [4, 5, 7]);
// SELECT * FROM pointer WHERE (id IN (:id_0_0, :id_0_1, :id_0_2))
Builder::init()->select("pointer")->where("id", 4, ">");
// SELECT * FROM pointer WHERE (id>id_0)
Builder::init()->select("pointer")->where("id", 4)->orCondition()->where("id", 5);
// SELECT * FROM pointer WHERE (id=:id_0 OR id=:id_1)
Builder::init()->select("pointer")
->where("id", 4)
->orCondition()
->subWhere()
->where("id", 5)
->andCondition()
->where("b", 50)
->subWhereEnd();
// SELECT * FROM pointer WHERE (id=:id_0) OR (id=:id_1 AND b=:b_2)
Builder::init()->select("pointer")->orderBy("b");
// SELECT * FROM pointer ORDER BY b
Builder::init()->select("pointer")->limit(10)->offset(10);
// SELECT * FROM pointer LIMIT 10 OFFSET 10
Builder::init()->select("pointer")->column("SUM(b)", "b_sum")->groupBy("id")->having("b_sum > 70");
// SELECT SUM(b) AS b_sum FROM pointer GROUP BY id HAVING b_sum > 70
Builder::init()->select("pointer")->whereRaw("id=(SELECT id FROM setter WHERE b=40)");
// SELECT * FROM pointer WHERE (id=(SELECT id FROM setter WHERE b=40))
Builder::init()->select("pointer")->whereRaw("id=(SELECT id FROM setter WHERE b=:b)")->addParameters(["b" => 40]);
// SELECT * FROM pointer WHERE (id=(SELECT id FROM setter WHERE b=:b))
Builder::init()->select("pointer")->column("b")->action("DISTINCT");
// SELECT DISTINCT b FROM pointer
$subBuilder = Builder::init("sub")->select("pointer")->column("1")->where("id", 4);
Builder::init()->select()->action("EXISTS")->subQuery($subBuilder->getSql(), "p_exists");
// SELECT EXISTS (SELECT 1 FROM pointer WHERE (id=:sub_id_0)) AS p_exists
Builder::init()->select("pointer")->innerJoin("polygon", "pointer_id=id");
// SELECT * FROM pointer INNER JOIN polygon ON pointer_id=id
Builder::init()->select("pointer")->leftOuterJoin("polygon", "pointer_id=id");
// SELECT * FROM pointer LEFT OUTER JOIN polygon ON pointer_id=id
$builder = Builder::init()->select("pointer", "p1")
->innerJoin("polygon AS p2", "p1.pointer_id=p2.id");
// SELECT * FROM pointer AS p1 INNER JOIN polygon AS p2 ON p1.pointer_id=p2.id
UPDATE
<?php
Builder::init()->update("pointer")->values(["id" => 40]);
// UPDATE pointer SET id=:id
Builder::init()->update("pointer")->values(["id" => 40])->where("b", 40);
// UPDATE pointer SET id=:id WHERE (b=:b_0)
Builder::init("nms")->update("pointer")->action("IGNORE")->values(["id" => ["id+1"], "b" => 40])->where("b", 100, ">");
// UPDATE IGNORE pointer SET id=id+1, b=:nms_b WHERE (b>:nms_b_0)
INSERT
<?php
Builder::init()->insert("pointer")->values(["a" => 20, "b" => 40]);
// INSERT INTO pointer (a, b) VALUES (:a_0, :b_0) DEFAULT VALUES
Builder::init()->insert("pointer")->setDefaultValues(false)->values(["a" => 20, "b" => 40]);
// INSERT INTO pointer (a, b) VALUES (:a_0, :b_0)
Builder::init()->insert("pointer")->values(["a" => 20, "b" => 40])->values(["a" => 10, "b" => 30]);
// INSERT INTO pointer (a, b) VALUES (:a_0, :b_0), (:a_1, :b_1) DEFAULT VALUES
DELETE
<?php
Builder::init()->delete("pointer");
// DELETE FROM pointer
Builder::init()->delete("pointer")->where("id", 17);
// DELETE FROM pointer WHERE (id=:id_0)
Builder::init()->delete("pointer")->action("IGNORE")->where("id", 17);
// DELETE IGNORE FROM pointer WHERE (id=:id_0)
Builder::init()->delete("pointer")->where("id", 17)->orderBy("b DESC");
// DELETE FROM pointer WHERE (id=:id_0) ORDER BY b DESC