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
ディレクトリを作成し、その中にこのリポジトリをドロップします。最後に、以下を追加します。
require '[lib-dir]/Envms/FluentPDO/src/Query.php';
アプリケーションの先頭に移動します。注:ソース コードを変更せずに FluentPDO を使用するには、オートローダーが必要です。
新しい PDO インスタンスを作成し、そのインスタンスを FluentPDO に渡します。
$pdo = 新しい PDO('mysql:dbname=fluentdb', 'ユーザー', 'パスワード');$fluent = 新しい EnvmsFluentPDOQuery($pdo);
その後、クエリをすばやく簡単に作成できます。
$query = $fluent->from('コメント') ->where('article.published_at > ?', $date) ->orderBy('published_at DESC') ->制限(5);
これにより、以下のクエリが構築されます。
SELECT コメント.*FROM コメントLEFT JOIN 記事 ON 記事.id = comment.article_idWHERE 記事.公開_at > ?ORDER BY 記事.公開_at DESCLIMIT 5
select からデータを取得するには、返された配列をループするだけです。
foreach ($query as $row) {echo "$row['title']n"; }
以下の従来の結合から始めましょう。
$query = $fluent->from('article') ->leftJoin('ユーザー ON ユーザー ID = 記事.ユーザー ID') ->select('ユーザー名');
これはかなり冗長であり、あまり賢明ではありません。テーブルで適切な主キー名と外部キー名が使用されている場合は、上記を次のように短縮できます。
$query = $fluent->from('article') ->leftJoin('ユーザー') ->select('ユーザー名');
その方が良いですが、理想的ではありません。ただし、結合を書かないほうがさらに簡単です。
$query = $fluent->from('article') ->select('ユーザー名');
すごいですよね? FluentPDO は、要求された列の前に外部テーブル名を追加することで、結合を構築できます。
上記の 3 つのスニペットはすべて、まったく同じクエリを作成します。
SELECT 記事.*、ユーザー名 FROM 記事 LEFT JOIN ユーザー ON user.id =article.user_id
最後に、リソースはその役割を終えたらすぐに解放することをお勧めします。
$fluent->close();
$query = $fluent->from('article')->where('id', 1)->fetch();$query = $fluent->from('user', 1)->fetch(); // 主キーで 1 行を選択する場合の短いバージョン
$values = array('title' => 'article 1', 'content' => 'content 1');$query = $fluent->insertInto('article')->values($values)->execute( );$query = $fluent->insertInto('article', $values)->execute(); // 短いバージョン
$set = array('published_at' => new FluentLiteral('NOW()'));$query = $fluent->update('article')->set($set)->where('id', 1 )->execute();$query = $fluent->update('article', $set, 1)->execute(); // 主キーによって 1 行を更新する場合の短いバージョン
$query = $fluent->deleteFrom('article')->where('id', 1)->execute();$query = $fluent->deleteFrom('article', 1)->execute(); // 主キーで1行削除する場合の短縮版
注: INSERT、UPDATE、および DELETE クエリは、 ->execute()
呼び出した後にのみ実行されます。
Apache 2.0 または GPL 2.0 ライセンスに基づいて商用および非商用に無料で使用できます。