victorium / yaqb

PHP 的另一个查询构建器。简单、愚蠢且完全框架无关。

1.1.3 2016-10-28 12:29 UTC

This package is auto-updated.

Last update: 2024-09-11 14:00:52 UTC


README

介绍

YAQB 是一个非常简单、愚蠢的实现框架,可以动态创建 SQL 查询字符串和参数。它没有数据库特定的功能,实际上也不会查询数据库。

用例

  • 作为另一个自研 ORM 的基础。
  • 需要组成许多查询然后批量执行。
  • 预先生成已知的静态 CRUD SQL 查询。
  • 生成查询,其中相同的查询可能需要以不同的方式查询,例如在 Web 请求中异步查询,在后台脚本或任务中同步查询。相同的查询,但不同的驱动程序运行。

许可

YAQB 中的所有源代码文件均根据包含的 LICENSE.txt 文件中的 MIT 许可协议发布。

安装

Composer

可以使用 composer 安装 YAQB (http://getcomposer.org/)。

  1. 安装 composer

    $ curl -s https://getcomposer.org/installer | php
    
  2. 使用 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