FuelPHP1.7でのクエリビルダ

クエリビルダとメソッドチェーン(メソッドチェイン)について。
同じ意味?

クエリは DBへの処理要求を文字列で表したもの、ビルダは実行可能ファイルを作成するもの。
メソッドは関数、チェーンは連鎖。

この意味で考えると・・・

1.クエリビルダとメソッドチェーン

まず、クエリビルダについて。

クエリビルダとはクエリを生成する機能で、SQL文をメソッドとプロパティを使って書くこと。
渡された値に基づき、クエリビルダがエスケープ処理した SQL文を作成してくれる。

クエリビルダを使いどころとしては、公式ドキュメントより

データをエスケープする、データを配列で使う、あるいは複数のデータベースエンジンを跨ぐことが出来るようなアプリケーションを作る、このような時、 ネイティブな SQL が重荷になることがあります。DB クラスのクエリビルダのメソッドを用いれば、ネイティブ SQL を抽象化して書くことが出来ます。

とのこと。
他の使いどころはデータベースを使う: クエリビルダ | The Definitive Guide to Yii | Yii PHP Frameworkの記事が参考になる。

メソッドチェーンとは、メソッドの返り値を $thisにすることで、メソッドを連続的に呼び出すこと。
「->」でつなげて書くことをメソッドチェーンと言うのかな。

この2つごっちゃになってたなー。
もしくは Ormとクエリビルダが混ざってるな。

2.FuelPHPのクエリビルダ

FuelPHPでのクエリビルダについて。
このようなSQL文がある。

SELECT * FROM `table` WHERE `col` = 1 ORDER BY `id` DESC;

上記のSQL文を、クエリビルダを使って書くと下記のようになる。

DB::select()->from( 'table' )->where( 'col', 1 )->order_by( 'id', 'desc' );

メソッドの順番は、入れ替えても大丈夫(同じSQL文が発行される)。
まあ、見にくいからやらないけど。

DB::select()->order_by( 'id', 'desc' )->from( 'table' )->where( 'col', 1 );

これは簡単な例。
小難しい SQL文を書くのは色々あるみたい(QueryBuilderで小難しいSELECT文を書くためのノウハウ #FuelPHPAdvent2012 – Dazing days)。

参考

Query Builder – クラス – FuelPHP ドキュメント

FuelPHPのクエリビルダでMySQLのorder by fieldを利用するためにDB::expr()を使ってみた | SUSH-i LOG

コメント

タイトルとURLをコピーしました