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を叩かれるのと比べれば良い選択肢となるのではないでしょうか。
ページネーションではなく日時や変数を使いたい場合にも応用できるかと思います。