この記事の所要時間: 約 1分25秒
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());
}
}
?>
- Newer: PHP4なスクリプトをPHP5へ移行する際に発生する7つの問題
- Older: Ruby on Rails vs PHP?
トラックバック: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 […]

