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