FluentPDO 是一个使用 PDO 的 PHP SQL 查询生成器。它是一个快速而轻便的库,具有智能连接生成器,可自动为您创建表连接。
用于创建强大查询的简单界面
支持任何与 PDO 兼容的数据库
能够用很少的代码构建复杂的 SELECT、INSERT、UPDATE 和 DELETE 查询
在智能 IDE 中使用代码补全功能对魔术方法进行类型提示
FluentPDO的稳定发布并积极维护。官方支持 PHP 7.3 到 PHP 8.0,但它可以与 PHP 7 之前的版本一起使用。
FluentPDO 的旧版本。它不再受支持,也不会维护或更新。该版本适用于 PHP 5.4 至 7.1。
这个版本是对 Fluent 的完全重写。它的主要优点是显着减少内存使用量并提高查询构建的性能。它还设置了一些额外的限制,以使查询更易于阅读和维护。文档也是一个非常常见的要求,版本 3 正在与开发一起完整记录。详细信息和指标将在可用后发布。
Sitepoint - FluentPDO 入门
安装 FluentPDO 的首选方法是通过 Composer。
在您的composer.json
文件中添加以下行:
"require": { ... "envms/fluentpdo": "^2.2.0" }
使用composer update
更新您的依赖项,就完成了!
如果您不想使用 Composer,请下载最新版本,在库目录中创建目录Envms/FluentPDO
,然后将此存储库放入其中。最后添加:
需要 '[lib-dir]/Envms/FluentPDO/src/Query.php';
到您的应用程序的顶部。注意:您需要一个自动加载器才能使用 FluentPDO,而不更改其源代码。
创建一个新的 PDO 实例,并将该实例传递给 FluentPDO:
$pdo = new PDO('mysql:dbname=fluentdb', '用户', '密码');$fluid = new EnvmsFluentPDOQuery($pdo);
然后,创建查询既快速又简单:
$query = $fluent->from('comment') ->where('article.published_at > ?', $date) ->orderBy('published_at DESC') ->限制(5);
这将构建以下查询:
SELECT comment.*FROM commentLEFT JOIN 文章 ONarticle.id = comment.article_idWHEREarticle.published_at > ?ORDER BYarticle.published_at DESCLIMIT 5
要从 select 中获取数据,我们所做的就是循环返回的数组:
foreach ($query as $row) {echo "$row['title']n"; }
让我们从传统的连接开始,如下所示:
$query = $fluent->from('文章') ->leftJoin('用户ON user.id =article.user_id') ->select('用户名');
这相当冗长,而且不太聪明。如果您的表使用正确的主键和外键名称,您可以将上面的内容缩短为:
$query = $fluent->from('文章') ->leftJoin('用户') ->select('用户名');
这更好,但并不理想。然而,不写任何连接会更容易:
$query = $fluent->from('文章') ->select('用户名');
太棒了,对吧? FluentPDO 能够通过将外表名称添加到请求的列之前来为您构建联接。
上面的所有三个片段将创建完全相同的查询:
从文章中选择文章.*,用户名 LEFT JOIN 用户 ON user.id =article.user_id
最后,在资源完成任务后立即释放资源总是一个好主意:
$fluid->close();
$query = $fluid->from('article')->where('id', 1)->fetch();$query = $fluid->from('user', 1)->fetch(); // 如果通过主键选择一行,则为较短版本
$values = array('title' => '文章 1', 'content' => '内容 1');$query = $fluent->insertInto('article')->values($values)->execute( );$query = $fluid->insertInto('article', $values)->execute(); // 较短的版本
$set = array('published_at' => new FluentLiteral('NOW()'));$query = $fluent->update('article')->set($set)->where('id', 1 )->execute();$query = $fluid->update('article', $set, 1)->execute(); // 如果通过主键更新一行则较短的版本
$query = $fluid->deleteFrom('article')->where('id', 1)->execute();$query = $fluent->deleteFrom('article', 1)->execute(); // 如果通过主键删除一行则较短的版本
注意:INSERT、UPDATE 和 DELETE 查询仅在调用->execute()
之后运行
在 Apache 2.0 或 GPL 2.0 许可下免费用于商业和非商业用途。