使用 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 版本不再提供維護及更新。
參考資料
安裝
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 協議》,轉載必須註明作者和本文連結