FluentPDO 中文文件

liuqing_hu發表於2018-12-10

使用 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 檔案新增如下程式碼:

"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 協議》,轉載必須註明作者和本文連結

相關文章