Lampager

OVERVIEW

OFFSET 句を使用しない,カーソルベースの高速でズレないページネーションを抽象化するライブラリ

YEAR 2017

lampager/lampager: Rapid pagination for various PHP frameworks
https://github.com/lampager/lampager

概要

Laravel のページネーション用メソッドには「paginate」「simplePaginate」が存在する。paginate の SQL は件数表示のために全件取得を行っているためパフォーマンスに大きな問題がある。simplePaginate はこの問題を解決しているが,OFFSET 句は依然として使用しており,削除などが発生するとページズレが起こる深刻な問題がある。そのため,WHERE 句での主キーによる絞り込み + LIMIT 句というアプローチを取らなければならないが,素の Laravel ではこれをべた書きするしかない。 

DMM でオンラインサロン開発に従事する過程で,ページネーション対応したAPIの実装に必要になったため制作した。同製品の中で広範囲にわたって使用している。

機能

カーソルとなるパラメータを渡すことで,自動的に必要な WHERE 条件を組み立てられる。また双方向ページネーションにも対応しており,これを有効にすると双方向への探索のために2つの SELECT クエリが UNION ALL で結合されたものが実行されるようになる。

Laravel 向けアダプタとして lampager-laravelIdiorm 向けアダプタとして lampager-idiorm を制作した。また友人の chitoku-k 氏には lampager-cakephp2 を制作してもらった。


WEBSITE