FluentPDO

2020-01-21 10:50:02 浏览数 (1)

FluentPDO

使用 PDO 构建的一款 PHP SQL Query Builder http://envms.github.io/fluentpdo/ (译注:修正 https://github.com/envms/fluentpdo)。

它是一款简洁、轻量的智能构建表连接的 SQL 生成器类库,能够为你自动创建表连接语句的数据表。

特性

  • 提供轻松创建健壮的 query 语句接口
  • 支持所有与 PDO 兼容的数据库系统
  • 仅需数行代码就能构建复杂的 SELECT、INSERT、UPDATE 和 DELETE 语句
  • 能够在所有支持代码自动补全的现代 IDE 编辑器中支持方法提示

系统要求

最新的 FluentPDO (2.x) 版本需要 PHP 7.1、7.2 或 7.3 版本及以上。v2.x 版本正在火热更新中。

历史版本(v1.x)FluentPDO 支持 PHP 5.4 到 PHP 7.1。注意:v1.x 版本不再提供维护及更新。

参考资料

Sitepoint - FluentPDO 入门教程

安装

Composer

最完美的安装方案就是通过 Composer 依赖管理工具安装。v2.0 版本已经正式发布!推荐在项目使用 2.x 版本,如果你在项目中发现任何问题,请联系我们,我们会尽快修复。

安装仅需在 composer.json 文件添加如下代码:

代码语言:javascript复制
"require": {
    ...
    "envms/fluentpdo": "^2.1.0"
}

使用 composer update 更新依赖库,然就就完成安装了!

复制安装

如果你不爱使用 composer,你可以在你的 library 目录下创建 Envms/FluentPDO 文件夹,然后将本类库复制到目录中。然后在项目中添加:

代码语言:javascript复制
require "[lib-dir]/Envms/FluentPDO/src/Query.php";

引入类库。注意:这种安装方式你需要使用自动加载程序来使用 FluentPDO 类库而不是去修改源码。

起步

创建一个 PDO 实例,然后将其作为参数注入到 FluentPDO 中。

代码语言:javascript复制
$pdo = new PDO("mysql:dbname=fluentdb", "root");
$fluent = new EnvmsFluentPdoQuery($pdo);

然就,就可以轻松创建查询语句了:

代码语言:javascript复制
$query = $fluent->from('comment')
                ->where('article.published_at > ?', $date)
                ->orderBy('published_at DESC')
                ->limit(5);

上面的代码会创建如下 SQL:

代码语言:javascript复制
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

获取查询结果集仅需遍历即可:

代码语言:javascript复制
foreach ($query as $row) {
    echo "$row[title]n";
}

使用高阶 join 构造器

下面,先从典型的 join 语句开始:

代码语言:javascript复制
$query = $fluent->from('article')
                ->leftJoin('user ON user.id = article.user_id')
                ->select('user.name');

代码有点长,看起来有点傻。如果你的主外键符合规范,可以简写成:

代码语言:javascript复制
$query = $fluent->from('article')
                ->leftJoin('user')
                ->select('user.name');

好了一点,但是还没完。甚至,你可以 不写任何 join 方法:

代码语言:javascript复制
$query = $fluent->from('article')->select('user.name');

超赞,有木有?我们仅需将要查询的外键表字段传入到查询字段中,FluentPDO 就能够为你构建出需要的 join 语句。

以上三个代码段会生成同一个 query 语句:

代码语言:javascript复制
SELECT article.*, user.name 
FROM article 
LEFT JOIN user ON user.id = article.user_id

关闭连接

最后,在完成它们的查询操作后,关闭数据库连接释放资源是个好习惯:

代码语言:javascript复制
$fluent->close();

CRUD 语句示例

select

代码语言:javascript复制
$query = $fluent->from('article')->where('id', 1);
$query = $fluent->from('user', 1);// 使用主键查询一条记录的简写

insert

代码语言:javascript复制
$values = array('title' => 'article 1', 'content' => 'content 1');

$query = $fluent->insertInto('article')->values($values)->execute();
$query = $fluent->insertInto('article', $values)->execute();// 简写方式

update

代码语言:javascript复制
$set = array('published_at' => new FluentLiteral('NOW()'));

$query = $fluent->update('article')->set($set)->where('id', 1)->execute();
$query = $fluent->update('article', $set, 1)->execute();// 简写方式

delete

代码语言:javascript复制
$query = $fluent->delteFrom('article')->where('id', 1)->execute();
$query = $fluent->deleteFrom('article', 1)->execute();// 简写方式

注意:INSERT、UPDATE 及 DELETE 语句仅在 execute 方法调用后才会执行。

阅读 [FluentPDO 主页]() 获取完全手册。

License

Free for commercial and non-commercial use under the Apache 2.0 or GPL 2.0 licenses.

0 人点赞