Home > CakePHP | PHP > CakePHP 任意のSQLを書く

CakePHP 任意のSQLを書く

  • 2007-06-06 (水) 0:16
  • CakePHP | PHP
  • このエントリーをはてなブックマークに追加
この記事の所要時間: 125

CakePHPには強力なO/Rマッパーがあるので、普段はSQLを書かなくても良いのですが、DBの関数を呼ぶ時などやはりSQL文を直接書きたい場面が出てきます。

そこでSQL文を直接発行する方法です。

SQL文を直接発行するにはモデルのqueryメソッドを呼ぶ方法とdboのqueryメソッドを呼ぶ方法があります。モデルのqueryメソッドは結局内部でdboのqueryメソッドを呼んでいますので、どちらも取れる値は同じです。

PHP:
  1. <?php
  2. class HogeControlle extends AppController {
  3.   $name = 'Hoge';
  4.  
  5.   function index() {
  6.     // PostgreSQL
  7.     // モデル
  8.     var_dump($this->Hoge->query('select version();'));
  9.  
  10.     // dbo
  11.     $db =& ConnectionManager::getDataSource($this->Hoge->useDbConfig);
  12.     var_dump($db->query('select version();'));
  13.   }
  14. }
  15. ?>

出力値です。(同じ出力なので一つだけ)

CODE:
  1. array(1) {
  2.   [0]=>
  3.   array(1) {
  4.     [0]=>
  5.     array(1) {
  6.       ["version"]=>
  7.       string(88) "PostgreSQL 8.2.3 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.4 (mingw special)"
  8.     }
  9.   }
  10. }

これが良いなあというのはSQLを発行した結果の値がメソッドの戻り値で取得できることです。

発行するだけなら何使っても簡単なんですが、結果を取得するのにfetchしたりするのがちょっと面倒だなと感じていました。(いやコード書いてもしれてるんですが、何となく;-))

[2007/06/07追記]

というかモデルに無いメソッドは__callでもれなくSQL文として発行されるみたいです。なので↓でいけます。(これはちょっとやり過ぎな感も)

PHP:
  1. <?php
  2. class HogeControlle extends AppController {
  3.   $name = 'Hoge';
  4.  
  5.   function index() {
  6.     $sql = "select version()";
  7.     var_dump($this->Hoge->$sql());
  8.   }
  9. }
  10. ?>

トラックバック:1

このエントリーのトラックバックURL
http://www.1x1.jp/blog/2007/06/cakephp_sql.html/trackback
Listed below are links to weblogs that reference
CakePHP 任意のSQLを書く from Shin x blog
pingback from CakePHP Tips | blog.ikekou.jp 11-11-11 (金) 18:02

[...] CakePHP 任意のSQLを書く – Shin x blog [...]

Home > CakePHP | PHP > CakePHP 任意のSQLを書く

検索
フィード
メタ情報

Return to page top