如何在laravel中返回分页缓存?

时间:2021-06-14 21:28:06

标签: laravel caching redis pagination

我想知道是否有任何方法可以将我在 Laravel 中执行的查询分页并将其存储在缓存中。

我已经放了 ->paginate() 但似乎缓存不是在 Eloquent 中返回而是作为一个对象返回。我用 gettype() 检查了变量的类型。

这是我的职责。有人可以帮我吗?

public function getProductsRecommendations($keywords)
{
    $expiration = 10;
    $keyName = 'productsRecommended';

    $list = Cache::remember($keyName, $expiration, function () use ($keywords) {
        return  Product::query()->where(function ($productsAll) use ($keywords) {
            if ($keywords) {
                foreach ($keywords as $keyword)
                    $productsAll->orWhere('title', 'LIKE', '%' . $keyword . '%')->orWhere('description', 'LIKE', '%' . $keyword . '%')->orWhere('code', 'LIKE', '%' . $keyword . '%');
            }
        })->where('status', 'active')->get();
    });

    return $list;
}

2 个答案:

答案 0 :(得分:0)

你应该每页缓存你的结果,键是当前页面。类似的东西:

$currentPage = request()->get('page',1);

$category = Cache::remember('sellcategory-' . $currentPage, 10, function(){
    return DB::table('elans')->orderBy('updated_at', 'desc')->where(['derc' => 1,'elaninnovu' => 'Satılır'])->paginate(10);
});

答案 1 :(得分:0)

我设法做我需要的。我会把它留在这里,以防有人遇到同样的问题并找到这个问题。

有时您可能想手动创建一个分页实例,传入一组项目。您可以根据需要通过创建 ''' + some_url + '''Illuminate\Pagination\Paginator 实例来执行此操作。

举例说明:

Illuminate\Pagination\LengthAwarePaginator
相关问题