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() などの前後処理は実行されない。必要であれば自前で呼ぶしかないだろう。