CakePHP 1.2 モデルのqueryメソッドでfind、findAllと同等の返り値を得る方法
http://d.hatena.ne.jp/ngtn/20080409/1207747539
より、
$this->User->query("SELECT * FROM users");
のように、SQL文を直接実行した場合、結果のデータの構造が find などと違っている。
同じ形式にするには find メソッドで発行する SQL文と同じものを生成すればいいみたい。
とりあえず、sqlite なら以下でうまくいった。明日、PostgreSQL でも試してみる。
<?php $db =& $this->User->getDataSource(); $fields = implode(", ", $db->fields($this->User)); $table = $db->fullTableName($this->User); $alias = $db->name($this->User->alias); $data = $this->User->query("SELECT {$fields} FROM {$table} AS {$alias}");
ただし、query メソッドで直接SQLを実行すると、ビヘイビアや Model::afterFind() などの前後処理は実行されない。必要であれば自前で呼ぶしかないだろう。