你怎么会忘记在Laravel中缓存的Eloquent模型?
关于拉拉维尔的理论问题在这里。
因此,我要做的缓存示例是:
Article::with('comments')->remember(5)->get();
理想情况下,我希望有一个文章更新事件,当该模型的实例(已缓存)的ID更新时,我想忘记该键(即使它忘记了查询的整个结果,而不仅仅是一个模型实例),是否可以这样做?
如果没有,是否有某种方法可以合理地干净利落地实现这一点?
关于拉拉维尔的理论问题在这里。
因此,我要做的缓存示例是:
Article::with('comments')->remember(5)->get();
理想情况下,我希望有一个文章更新事件,当该模型的实例(已缓存)的ID更新时,我想忘记该键(即使它忘记了查询的整个结果,而不仅仅是一个模型实例),是否可以这样做?
如果没有,是否有某种方法可以合理地干净利落地实现这一点?
所以我正在寻找与OP相同的问题的答案,但对解决方案并不满意。所以我最近开始研究这个问题,并浏览了框架的源代码,我发现该方法接受调用的第二个参数,并且由于某种原因,它尚未记录在他们的网站上(或者我错过了吗?)。remember()
key
现在关于这一点的好处是,数据库生成器使用相同的缓存驱动程序,该驱动程序是在“或者我应该说与此处记录的缓存系统相同的缓存系统 - 缓存”下配置的。因此,如果您将min和key传递给,则可以使用相同的密钥来清除缓存使用方法,实际上,您几乎可以使用官方网站上列出的所有方法,例如,,,等。但我不建议你使用这些其他方法,除非你知道你在做什么。app/config/cache.php
remember()
Cache::forget()
Cache
Cache::get()
Cache::add()
Cache::put()
这是一个让你和其他人理解我的意思的例子。
Article::with('comments')->remember(5, 'article_comments')->get();
现在,上面的查询结果将被缓存,并将与密钥相关联,然后可以随时使用它来清除它(在我的情况下,我在更新时这样做)。article_comments
所以现在,如果我想清除该缓存,无论它记住了多少时间。我可以通过打电话来做到这一点,它应该像预期的那样工作。Cache::forget('article_comments');
希望这有助于每个人:)
我认为一个好的方法是这样的:
$value = Cache::remember('users', $minutes, function()
{
return DB::table('users')->get();
});
然后使用模型观察点检测更新模型的事件
class UserObserver {
public function saving($model)
{
//
}
public function saved($model)
{
// forget from cache
Cache::forget('users');
}
}
User::observe(new UserObserver);