xety/fluentpdo

FluentPDO是一个快速轻量级的PHP库,用于快速构建查询。它具有一个智能连接构建器,可以自动创建表连接。

v2.1.4 2020-07-16 00:19 UTC

README

FluentPDO是使用PDO的PHP SQL查询构建器。它是一个快速轻量级的库,具有智能连接构建器,可以自动为您创建表连接。

功能

  • 创建强大查询的简单界面
  • 支持任何与PDO兼容的数据库
  • 能够用很少的代码构建复杂的SELECT、INSERT、UPDATE和DELETE查询
  • 魔法方法类型提示,智能IDE中支持代码自动完成

要求

FluentPDO的官方最新版(2.x)支持PHP 7.1、7.2和7.3。v2.x正在积极维护。

FluentPDO的旧版(1.x)与PHP 5.4至7.1兼容。注意: v1.x不再受支持,也不会维护或更新。

参考

Sitepoint - FluentPDO入门

安装

Composer

安装FluentPDO的首选方式是通过composer。2.0版本已发布!请开始在项目中使用2.x版本,并将您发现的问题告诉我们,我们将迅速解决这些问题。

在您的composer.json文件中添加以下行

"require": {
	...
	"envms/fluentpdo": "^2.1.0"
}

使用composer update更新您的依赖项,您就完成了!

复制

如果您不希望使用composer,在您的库目录中创建Envms/FluentPDO目录,并将此仓库放入其中。最后,在您的应用顶部添加

require "[lib-dir]/Envms/FluentPDO/src/Query.php";

注意:您需要一个自动加载器才能在不更改其源代码的情况下使用FluentPDO。

入门

创建一个新的PDO实例,并将实例传递给FluentPDO

$pdo = new PDO("mysql:dbname=fluentdb", "root");
$fluent = new \Envms\FluentPDO\Query($pdo);

然后,创建查询变得快速简单

$query = $fluent->from('comment')
             ->where('article.published_at > ?', $date)
             ->orderBy('published_at DESC')
             ->limit(5);

这将构建以下查询

SELECT comment.*
FROM comment
LEFT JOIN article ON article.id = comment.article_id
WHERE article.published_at > ?
ORDER BY article.published_at DESC
LIMIT 5

要从选择中获取数据,我们只需遍历返回的数组即可

foreach ($query as $row) {
    echo "$row[title]\n";
}

使用智能连接构建器

让我们从传统的连接开始,如下所示

$query = $fluent->from('article')
             ->leftJoin('user ON user.id = article.user_id')
             ->select('user.name');

这很啰嗦,也不太智能。如果您的表使用合适的主键和外键名称,您可以将上面的代码缩短为

$query = $fluent->from('article')
             ->leftJoin('user')
             ->select('user.name');

这好一些,但还不是最佳。然而,更好的方法是根本不写连接

$query = $fluent->from('article')
             ->select('user.name');

太棒了,不是吗?FluentPDO能够通过您将外键表名附加到请求的列来为您构建连接。

上面的三个代码片段将创建完全相同的查询

SELECT article.*, user.name 
FROM article 
LEFT JOIN user ON user.id = article.user_id
关闭您的连接

最后,一旦资源完成其工作,总是释放资源是一个好主意

$fluent->close();

CRUD查询示例

SELECT
$query = $fluent->from('article')->where('id', 1);
$query = $fluent->from('user', 1); // shorter version if selecting one row by primary key
INSERT
$values = array('title' => 'article 1', 'content' => 'content 1');

$query = $fluent->insertInto('article')->values($values)->execute();
$query = $fluent->insertInto('article', $values)->execute(); // shorter version
UPDATE
$set = array('published_at' => new FluentLiteral('NOW()'));

$query = $fluent->update('article')->set($set)->where('id', 1)->execute();
$query = $fluent->update('article', $set, 1)->execute(); // shorter version if updating one row by primary key
DELETE
$query = $fluent->deleteFrom('article')->where('id', 1)->execute();
$query = $fluent->deleteFrom('article', 1)->execute(); // shorter version if deleting one row by primary key

注意:INSERT、UPDATE和DELETE查询将在您调用->execute()之后执行

完整的文档可以在FluentPDO主页上找到

许可

Apache 2.0GPL 2.0许可下免费用于商业和非商业用途。