インフラエンジニアを募集中です。詳細はこちら【CakePHP】SQLが頭に浮かぶなら迷わずqueryメソッドを使おうPHPinoue2009.02.18こんにちは、inoueです。高校球児のようにちょっと連投。CakePHPを使ってアプリケーション開発をしていると、「便利だなあ」と思う点と「面倒だなあ」と思う点があります。複数テーブルをJOINしたり、MySQL関数を使いたいときは非常に面倒に思ってしまいます。そんなとき、思い悩まずに済むのがモデルのqueryメソッドです。queryメソッドに渡せば、実行結果を配列で返してくれます。例として、アクセスログを集計してページごとの日別アクセス数を求める場合はこんな感じ。$this->AccessLog->query($sql);ここで注意したいのが、戻り値の配列の構成。COUNT()などMySQL関数を使ったカラムとテーブルのカラムは次のように別々にまとめられています。取得結果をforeach()等でまわして処理をする際注意が必要です。テスト環境と本番環境でテーブル名のプレフィクスあり/なしが変わる場合には、その設定をSQLに反映する必要がありますのでご注意ください。アソシエーション設定との使い分け実際には、アプリケーション内で密接に連携しているテーブル同士はモデルのアソシエーション設定をしておくのが賢明です。一方で、イレギュラーに「このメソッドでだけJOINしたい」といった場合は、メソッド内でbindModelメソッドを利用するのが正当な方法かと思います。今回紹介したqueryメソッドの主な使い道としてはbindModelに設定する前にすでにSQLが頭に浮かんじゃってる。ようなデータの移動をSQL一発でやっちゃいたい。デバッグモードで表示されるSQLがなんだかまどろっこしい感じ。処理が重い(のを改善したい)。いったあたりの、さらにイレギュラーな場合になるかと思います。いえ、従来のPHP開発で培ったスキルをqueryメソッドにうまく活かして、フレームワークに振り回されすぎないプログラミングをするのもいいのではないでしょうか。編」コレだけ読めばバッチリお勧め書籍紹介tanaka2008.03.24はてブビット演算を使ってスマートプログラミング(MySQL&PHP)PHPinoue2008.07.24はてブバシャログ。Web制作スタッフによるブログです。「現場で使えるテクニック」をモットーに、Web制作全般についてお届けします。