LoginSignup
2
3

More than 3 years have passed since last update.

LaravelのCacheでpaginateを使う

Last updated at Posted at 2020-07-18

Laravelに標準で組み込まれているCache機能は、強力かつ簡単にキャッシュを実装できます。
キャッシュは大量の件数や高頻度のSQLで使われる事が多いため、必然的にページネーションと併用したいケースもあるかと思います。

TestController.php
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use App\Models\Test;

class TestController extends Controller
{
    public function tests(Request $request)
    {
      $sec = "86400"; // 1day
      $page = $request->has('page') ? $request->query('page') : 1;
      $limit = $request->has('limit') ? $request->query('limit') : 25;
      $tests = Cache::remember('test_'.$page.'_limit_'.$limit, $sec, function() use ($limit) {
        return Test::paginate($limit);
      });
    }
}

sec や limit の数字は適時変更してください。
ModelとViewは割愛します。

こうすると、ある程度動的にページングをキャッシュできます。
ちなみに Cache::rememberを使うと、「○秒間、キャッシュが存在しない場合のみfunctionの内容を実行する」となります。

Cacheの使い方の詳細はこちら。
Laravel 7.x キャッシュ
https://readouble.com/laravel/7.x/ja/cache.html

page と limit の組み合わせで何パターンかキャッシュファイルが生成されますので、一度のアクセスで全パターンのキャッシュは出来ませんが、毎回高負荷のSQLを叩かれるのと比べれば良い選択肢となるのではないでしょうか。

ページネーションではなく日時や変数を使いたい場合にも応用できるかと思います。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3