lichtner/fluentpdo

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

v2.2.4 2022-01-27 21:49 UTC

README

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

功能

  • 创建强大查询的简单接口
  • 支持任何与 PDO 兼容的数据库
  • 能够用少量代码构建复杂的 SELECT、INSERT、UPDATE 和 DELETE 查询
  • 智能 IDE 中的代码补全对魔法方法的类型提示

版本

版本 2.x

FluentPDO 的稳定版本,正在积极维护。官方支持 PHP 7.3 到 PHP 8.0,但也支持 PHP 7 的早期版本。

版本 1.x

FluentPDO 的遗留版本。它不再受支持,也不会维护或更新。此版本与 PHP 5.4 到 7.1 兼容。

版本 3.x - alpha

此版本是从头开始重写的 Fluent 的完整版本。其主要优点是显著降低内存使用量,并在查询构建中提供更高的性能。它还对查询的读取和维护设置了一些额外的限制。文档也是一个非常常见的请求,版本 3 将与开发同步进行完整文档化。详情和指标将在可用时发布。

参考

Sitepoint - FluentPDO 入门

安装

Composer

安装 FluentPDO 的首选方法是使用 composer

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

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

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

下载 Zip

如果您不想使用 composer,请下载最新版本,在您的库目录中创建 Envms/FluentPDO 目录,并将此存储库放入其中。最后,在您的应用程序顶部添加

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

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

入门

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

$pdo = new PDO('mysql:dbname=fluentdb', 'user', 'password');
$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)->fetch();
$query = $fluent->from('user', 1)->fetch(); // 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() 后运行

许可证

Apache 2.0GPL 2.0许可证下,可用于商业用途和非商业用途。