geste / fluentpdo
FluentPDO 是一个快速轻量的 PHP 库,用于快速构建查询。它具有智能的连接构建器,可以自动创建表连接。
4.1.1
2022-07-21 22:29 UTC
Requires
- php: >=8
- ext-pdo: *
Requires (Dev)
- phpunit/phpunit: ^9.0
This package is not auto-updated.
Last update: 2024-09-27 08:51:07 UTC
README
FluentPDO 是一个使用 PDO 的 PHP SQL 查询构建器。它是一个快速轻量级的库,具有智能的连接构建器,可以自动为您创建表连接。
特性
- 创建强大查询的简单接口
- 支持任何与 PDO 兼容的数据库
- 用少量代码构建复杂的 SELECT、INSERT、UPDATE & DELETE 查询
- 魔法方法类型提示,在智能 IDE 中支持代码补全
要求
版本 4 支持 PHP 8 并处于积极维护状态。
参考
Sitepoint - FluentPDO 入门(不再完全兼容)
安装
在您的 composer.json
文件中添加以下行
"require": {
...
"geste/fluentpdo": "^4"
}
使用 composer update
更新您的依赖项,然后完成操作!
入门
创建一个新的 PDO 实例,并将该实例传递给 FluentPDO
$pdo = new PDO('mysql:dbname=fluentdb', 'root'); $fluent = new \Envms\FluentPDO\Query($pdo);
然后,创建查询既快又简单
$query = $fluent->from('comment') ->where('article.publishedAt > ?', $date) ->orderBy('publishedAt DESC') ->limit(5);
这将构建以下查询
SELECT comment.* FROM comment LEFT JOIN article ON article.articleId = comment.articleId WHERE article.publishedAt > ? ORDER BY article.publishedAt DESC LIMIT 5
要从选择中获取数据,我们只需遍历返回的数组即可
foreach ($query as $row) { echo $row['title'] . PHP_EOL; }
使用智能连接构建器
让我们从传统的连接开始,如下所示
$query = $fluent->from('article') ->leftJoin('user ON user.userId = article.userId') ->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.userId = article.userId
关闭您的连接
最后,在它们完成职责后立即释放资源总是一个好主意
$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 = ['title' => 'article 1', 'content' => 'content 1']; $query = $fluent->insertInto('article')->values($values)->execute(); $query = $fluent->insertInto('article', $values)->execute(); // shorter version
UPDATE
$set = ['published_at' => new Literal('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.0 或 GPL 2.0 许可下免费用于商业和非商业用途。