複雑なsqlをなげたいので、$model->queryをしたく、以下の内容を参考にしました。
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1356&forum=6
このサイト内に、function paginateのところでSQL文を組み立てていますが、
当方のDBがoracleでやりたいので、limit offsetではなく、rownumにしないといけないですが、
rownumで、対応できるfunction paginateの作り方を教えてほしいですっ
function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null) {
$offset = $page * $limit - $limit;
$sql = $conditions;
$sql .= " order by " . $order;
$sql .= " limit " . $limit;
$sql .= " offset " . $offset;
return $this->query($sql);
}
何卒よろしくお願い致します。
rownumでlimit, offsetの代用をするには、SQL文そのものを変更する必要があります。
このため $condition をそのまま渡すことはできず、とりあえずテーブル名を $table に、where句を $where に渡してselectを実行するSQL文を紹介します。
<?php function paginate($table, $where, $fields, $order, $limit, $page = 1, $recursive = null) { $offset = $page * $limit - $limit; $sql = select * fto (slect *, rownum as row_id from {$table} where {$where} order by {$order}) where row_id between {$offset} ans {$limit};"; return $this->query($sql); } ?>