クエリビルダとメソッドチェーン(メソッドチェイン)について。
同じ意味?
クエリは 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
コメント