検索結果の件数が多い時などに、1ページ、2ページ…と
分けて表示する際に重宝するライブラリですが、
使い方にちょっとクセがあり、それはCodeIgniter自身の特性にも関係しているので
Paginationクラスが悪いわけではありませんがここで解説します。
長くなるので続きはwebで。
検索画面を想定すると、Paginationを使う場合に
検索結果の総件数を取得するクエリと n ページで表示する分のクエリの
2回発行する必要があります。
ActiveRecordを利用している場合には、一度総件数を取得する際に
$this->db->get()->num_rows();した後に、1ページ分の情報を取得しようとLimit句を追加して以下のように再度クエリを実行したいと思います。
$this->db->limit(10, 0); $this->db->get();ところが、ActiveRecordの特性上、一度クエリを発行してしまうと
Where句の条件などはクリアされてしまいます。
同じ条件文を作成する為にコードをコピーするのはさすがにナンセンスだと思います。
ActiveRecordではこのようなことを想定してか、キャッシングという機能があります。
$this->db->start_cache(); // クエリキャッシュ開始 $this->db->from('table'); $this->db->where('a', 'b'); $this->db->order_by('c', 'asc'); $this->db->stop_cache(); // クエリキャッシュ終了 // 総件数取得 $total_rows = $this->db->get()->num_rows(); $per_page = 10; $config['base_url'] = '/test/'; $config['total_rows'] = $total_rows; $config['per_page'] = $per_page; $config['first_link'] = "最初"; $config['last_link'] = "最後"; // ページネーション作成 $this->pagination->initialize($config); // 1ページの表示限界設定 $this->db->limit(10, $offset); $query = $this->db->get(); // クエリキャッシュクリア $this->db->flush_cache();このようにすると総件数で取得した条件文を保持したまま、Limit句を追加して
再度クエリを発行することができます。
0 件のコメント:
コメントを投稿