源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

分享一个Laravel好用的Cache宏

  • 时间:2020-02-13 01:18 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:分享一个Laravel好用的Cache宏
Laravel提供的缓存工具很好用,手册里介绍了一些基本的用法,比如get,put,forget,forever等,一开始我是像下面这样使用的:
[u]复制代码[/u] 代码如下:
if (!$article = Cache::get('article_1')) {     $article = Article::find(1);     Cache::forever('article_1',$article); }
这是最基本的用法,自动判断缓存是否存在,不存在则从数据库中取并写入缓存。 后来发现模型也自带remember 和 rememberForever方法,例如可以这样:
[u]复制代码[/u] 代码如下:
$article = Article::rememberForever('article_1')->where('id','=',1);
这个有局限性,在复杂查询时并不能完全缓存数据,比如使用了with()预加载关联数据时就无法缓存关联数据。 然后发现Cache也可以像Response那样自定义宏方法,遂作如下尝试:
[u]复制代码[/u] 代码如下:
//注册缓存存取宏 Cache::macro('want',function($key,$minutes=0,$callback){     if (!$data = Cache::get($key)) {         $data = call_user_func($callback);         if ($minutes == 0) {             Cache::forever($key,$data);         } else {             Cache::put($key,$data,$minutes);         }     }     return $data; });
这个方法可以放在bootstrap/start.php里,也可以放在filter中的App::before()中,随自己项目方便吧,看下如何使用的:
[u]复制代码[/u] 代码如下:
$id = Input::get('id'); $article = Cache::want('article_'.$id,0,function() use ($id){     return Article::with('tags')->findOrFail($id,['id','cid','title','content_html as content','created_at','updated_at']); });
个人挺喜欢这种写法的。希望大家能够喜欢本文内容。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部