Laravel5.6, 5.7 VoyagerでServerSide Paginationを実装する

Laravel5.6, 5.7 VoyagerでServerSide Paginationを実装する

Laravel5.6, 5.7の管理画面パッケージ「Voyager」。このパッケージはかなり便利ですが、データ数が多くなると、ページ読み込みがかなり重くなります。

5秒以上待たされることも多いので、データ数が多くなるようなサイトでは、ちょっと使いづらいです。

 

この現象はBread画面を表示する時データを全件取得、さらにリレーションがある場合そのクエリも1データごとに発行して、、、とやっているからのようです。

 

画像は以前の記事で100件のテストデータを入れたProductsページです。121のクエリが発行されています。このうち100クエリはproduct-tag間のリレーションクエリです。

 

流石にこのままだと実用に難があるのでサーバーサイドでのペジネーションに変更します(今回はこのままProductsページを対象とします)。

/admin/bread/products/editに移動し、BREAD info のServer-side Paginationを「Yes」に

変更してください。(基本やることはこれだけです)

 

Productsページのテーブル上部、検索欄が変化し、クエリが121件か37件に変化しました。

表示速度も気にならないくらいに変化しました(10秒位から1秒行かないくらいに)。

 

ちなみに、コントローラー内での処理はこんな感じ。

 

=とかcontains、idとかを選択するのが面倒なので、「name」のLIKE検索にしてしまいましょう。

/vendor/tcg/voyager/resource/views/bread/browse.blade.php内の検索用入力欄はこんな感じ。

これを変えちゃいましょう。

これで「name」のLIKE検索になりました。

 

その他の条件を追加したいときはController内で検索条件を整形してください。(コメントのここから〜ここまでの中でいい感じに)

 

※VoyagerBaseControllerやbrowse.blade.phpはvendor内にあるので、基本的にいじらない方がいいです。Voyagerはcontrollerを外部出力できるので、そちらを行なってください。

Laravelカテゴリの最新記事