你好,我已经尝试缓存这个查询返回几个小时了,但没有成功。
$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');