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 版本不再提供维护及更新。
参考资料
安装
Composer
最完美的安装方案就是通过 Composer 依赖管理工具安装。v2.0 版本已经正式发布!推荐在项目使用 2.x 版本,如果你在项目中发现任何问题,请联系我们,我们会尽快修复。
安装仅需在 composer.json 文件添加如下代码:
"require": {
...
"envms/fluentpdo": "^2.1.0"
}
使用 composer update 更新依赖库,然就就完成安装了!
复制安装
如果你不爱使用 composer,你可以在你的 library 目录下创建 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);
上面的代码会创建如下 SQL:
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";
}
使用高阶 join 构造器
下面,先从典型的 join 语句开始:
$query = $fluent->from('article')
->leftJoin('user ON user.id = article.user_id')
->select('user.name');
代码有点长,看起来有点傻。如果你的主外键符合规范,可以简写成:
$query = $fluent->from('article')
->leftJoin('user')
->select('user.name');
好了一点,但是还没完。甚至,你可以 不写任何 join 方法:
$query = $fluent->from('article')->select('user.name');
超赞,有木有?我们仅需将要查询的外键表字段传入到查询字段中,FluentPDO 就能够为你构建出需要的 join 语句。
以上三个代码段会生成同一个 query 语句:
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);// 使用主键查询一条记录的简写
insert
$values = array('title' => 'article 1', 'content' => 'content 1');
$query = $fluent->insertInto('article')->values($values)->execute();
$query = $fluent->insertInto('article', $values)->execute();// 简写方式
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();// 简写方式
delete
$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.
本作品采用《CC 协议》,转载必须注明作者和本文链接