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

CakePHP 任意のSQLを書く

この記事の所要時間: 125

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

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

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

<?php
class HogeControlle extends AppController {
  $name = 'Hoge';

  function index() {
    // PostgreSQL
    // モデル
    var_dump($this->Hoge->query('select version();'));

    // dbo
    $db =& ConnectionManager::getDataSource($this->Hoge->useDbConfig);
    var_dump($db->query('select version();'));
  }
}
?>

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

array(1) {
  [0]=>
  array(1) {
    [0]=>
    array(1) {
      ["version"]=>
      string(88) "PostgreSQL 8.2.3 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.4 (mingw special)"
    }
  }
}

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

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

[2007/06/07追記]

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

<?php
class HogeControlle extends AppController {
  $name = 'Hoge';

  function index() {
    $sql = "select version()";
    var_dump($this->Hoge->$sql());
  }
}
?>
Pocket

follow us in feedly

トラックバック:1

このエントリーのトラックバックURL
/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