CakePHP1.3.6:任意のSQLを実行する。

CakePHPではモデルを定義するだけで、基本的なSQLは書かなくていい。
だが、それだと困る場面もあると思う。
と思ってググってみると、shinbaraさんのブログにありがたいことが書いてあった(感謝です)。

コードを見た方が早いので書いておく。
コントローラーに以下のtestアクションを書く。

function test(){
    $sql='select * from sales;';
    $db =& ConnectionManager::getDataSource($this->Sale->useDbConfig);
    var_dump($db->query($sql));
}

実行すると、以下の結果をえる。気の利いた配列で帰ってくるのはいいねぇ。

array(4) { 
  [0]=> array(1) { 
    ["sales"]=> array(7) { 
      ["id"]=> string(1) "1" 
      ["customer_id"]=> string(1) "1" 
      ["item_name"]=> string(18) "おまんじゅう" 
      ["amount"]=> string(3) "101" 
      ["purchase_date"]=> string(10) "2010-12-01" 
      ["memo"]=> string(0) "" 
      ["timestamp"]=> string(19) "2010-12-09 12:29:48" 
   } } 
  [1]=> array(1) { 
    ["sales"]=> array(7) { 
      ["id"]=> string(1) "8" 
      ["customer_id"]=> string(1) "8" 
      ["item_name"]=> string(15) "かしわもち" 
      ["amount"]=> string(4) "3000" 
      ["purchase_date"]=> string(8) "2011-1-1" 
      ["memo"]=> string(0) "" 
      ["timestamp"]=> string(19) "2010-12-09 18:05:01" 
  } } 
  [2]=> array(1) { 
    ["sales"]=> array(7) { 
      ["id"]=> string(2) "10" 
      ["customer_id"]=> string(1) "8" 
      ["item_name"]=> string(15) "かしわもち" 
      ["amount"]=> string(4) "3000" 
      ["purchase_date"]=> string(8) "2011/1/1" 
      ["memo"]=> string(0) "" 
      ["timestamp"]=> string(19) "2010-12-09 18:13:08" 
  } } 
  [3]=> array(1) { 
    ["sales"]=> array(7) { 
      ["id"]=> string(2) "11" 
      ["customer_id"]=> string(2) "10" 
      ["item_name"]=> string(9) "おはぎ" 
      ["amount"]=> string(3) "300" 
      ["purchase_date"]=> string(8) "2011/1/1" 
      ["memo"]=> string(18) "そうですね。" 
      ["timestamp"]=> string(19) "2010-12-09 19:26:04" 
} }