この記事の所要時間: 約 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 […]