如何使用缓存在Laravel中存储查询结果



你好,我已经尝试缓存这个查询返回几个小时了,但没有成功。

$data = $query->groupBy('visits.images_id')
->orderByRaw('COUNT(visits.images_id) desc')
->select('images.*')
->paginate($settings->result_request)->onEachSide(1);
return $data;

我知道它能以某种方式工作,但我仍然是php的初学者,不知道如何编写代码。

Cache::remember

有人能帮我吗?如果能找到一个能不时为我的laravel应用程序编程以换取金钱的人,我将不胜感激。祝大家度过美好的一天,并提前感谢!

$data = cache()->remember('data', now()->addMinutes(<minutes_to_remember_the_cache_for>), function () {
return $query->groupBy('visits.images_id')
->orderByRaw('COUNT(visits.images_id) desc')
->select('images.*')
->paginate($settings->result_request)->onEachSide(1);
});

这应该能奏效。。。

很可能您想要缓存get结果。


// This would become your query builder. There's no need to cache this
// as this is just a builder.
$builder = $query->groupBy('visits.images_id')
->orderByRaw('COUNT(visits.images_id) desc')
->select('images.*');
dd($builder); // To see the SQL

接下来,我将创建一个存储库。

namespace AppRepositories;
use IlluminateDatabaseEloquentBuilder;
class QueryRepository
{
public function paginate(Builder $builder, $extraParams, string $key)
{
return cache()->remember($key, 'SOME-SECONDS', function() use($builder, $extraParams) {
return $builder->paginate($extraParams)->onEachSide(1);
});
}
}

用法:


use AppRepositoriesQueryRepository;
$repository = new QueryRepository;
$extraParams = $settings->result_request;
$data = $repository->paginate($builder, $extraParams, 'UNIQUE-KEY-THAT-SHAPES-THIS-QUERY');

最新更新