你怎么会忘记Laravel中缓存的Eloquent模型?

Pet*_*Fox 28 php caching laravel laravel-4

关于Laravel的理论问题.

所以我要做的缓存示例是:

Article::with('comments')->remember(5)->get();
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望有一个文章更新事件,当该模型的实例的ID(已经缓存)更新时,我想忘记该密钥(即使它是忘记的查询的整个结果而不是仅仅那一个模型实例),有可能这样做吗?

如果没有,是否有某种方法可以合理地实现这一点?

Sye*_*.R. 59

所以我一直在寻找与OP相同问题的答案,但对解决方案并不满意.所以我最近开始玩这个并通过框架的源代码,我发现该remember()方法接受第二个参数被调用,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');,它应该按预期工作.

希望这有助于每个人:)

  • 很好的答案,谢谢.对于那些不清楚的人,要记住的第一个参数是缓存的分钟数.http://laravel.com/api/source-class-Illuminate.Database.Query.Builder.html#881-893 (3认同)

Gla*_*elp 13

我认为做一个好办法就是像这样:

$value = Cache::remember('users', $minutes, function()
{
    return DB::table('users')->get();
});
Run Code Online (Sandbox Code Playgroud)

然后使用Model Observers来检测更新模型的事件

class UserObserver {

    public function saving($model)
    {
        //
    }

    public function saved($model)
    {
        // forget from cache
        Cache::forget('users');
    }

}

User::observe(new UserObserver);
Run Code Online (Sandbox Code Playgroud)