CakePHP 1.2 で大量データの処理
Model::findAll() だとすぐにメモリー不足になってしまうような処理も、
DboSource::fetchRow() で逐次読み込めば大丈夫。
$db =& $this->User->getDataSource(); $row = $ds->fetchRow("SELECT * FROM users"); while (!empty($row)) { var_dump($row); // 何かの処理 $row = $db->fetchRow(); // 次のデータ読み込み }
(7/1 追記)
大丈夫・・・と思ったが、問題発生!
逐次処理のループ内で DboSource や Model を利用してデータベースにアクセスすると、fetchRow() がリセットされてしまう・・・。なんとかならないかなぁ。応急処置として、ループ内では直接 pg_query() を実行することにした。