【问题标题】:How to return paging cache in laravel?如何在 laravel 中返​​回分页缓存?
【发布时间】:2021-08-30 18:47:40
【问题描述】:

我想知道是否有任何方法可以分页我在 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;
}

【问题讨论】:

    标签: laravel caching redis pagination


    【解决方案1】:

    您应该使用当前页面作为键来缓存每页的结果。比如:

    $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);
    });
    

    【讨论】:

    • 我无法将分页保存在缓存中,因为在我的情况下可以更改分页。还有其他方法吗?
    【解决方案2】:

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

    有时您可能希望手动创建一个分页实例,并传入一组项目。您可以通过创建Illuminate\Pagination\PaginatorIlluminate\Pagination\LengthAwarePaginator 实例来完成此操作,具体取决于您的需要。

    举例说明:

    use Illuminate\Pagination\Paginator;
    
    $paginator = new Paginator($array, $rowPerPage, $currentPage = null);
    

    【讨论】:

      猜你喜欢
      • 2021-07-20
      • 2020-03-08
      • 1970-01-01
      • 2016-05-03
      • 2015-07-11
      • 2023-04-09
      • 2017-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多