Laravel 缓存与时间过滤器

标签 laravel caching

假设我在 laravel 中缓存查询:

return Cache::remember('posts.all', 20, function(){
         return Post::all();
});

一切都好。

我的问题是,如果我想对帖子示例应用过滤,获取上周的帖子

Post::whereBetween('created_at', [$from, $to])->get();

如果用户从上个月的时间选择器示例中选择了不同的日期,这将如何与缓存一起使用?

最佳答案

如果您这样做,将为所有用户提供相同的缓存结果。如果你想cache user specific data ,您需要将用户ID添加到 key 中:

Cache::remember('posts.all.' . auth()->id(), 20, function() use($from, $to) {
     return Post::whereBetween('created_at', [$from, $to])->get();
});

然后获取数据:

cache('posts.all.' . auth()->id())

更新

为了让 Laravel 刷新缓存的查询结果,您还需要缓存起止日期并检查这些。

if (cache('from' . auth().id()) !== $from || cache('to' . auth().id()) !== $to) {
    Cache::forget('posts.all.' . auth().id());
} 

关于Laravel 缓存与时间过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48841796/

相关文章:

php - 如何创建 Laravel Eloquent 实体的空实例

php - Laravel: 'null value in column "密码“违反了非空约束”,即使确实提供了密码

angularjs - 如何在使用angularjs时停止缓存

caching - azure appfabric 缓存写入后面功能

iphone - 如何使用cache.manifest更新缓存的iPhone Web应用程序上的文件

mysql - 如何在 Laravel 中保存另一个数据库表中的数据?

laravel - 如何将所有\Illuminate\Http\Request $request 数据设置为 FormRequest 对象以在 LARAVEL 中的 Controller 中使用

php - Composer 告诉我 mbstring 在我的服务器上丢失,但它已启用 - 想法?

java - 如果查询类型为默认值,Elasticsearch 缓存查询将不起作用

java - 级联持久上的 Eclipselink 查询缓存失效