Laravelの使いやすいCacheマクロを共有します。
Laravelが提供するキャッシュツールはとても使いやすいです。マニュアルには、get、put、forget、foreverなどの基本的な使い方が紹介されています。最初は次のように使います。
その後、モデルはrememberとremember Foreverの方法を持っていることが分かりました。例えば、このようにしてもいいです。
その後、CacheがResponseのようにマクロをカスタマイズできることがわかったので、次のように試してみました。
if (!$article = Cache::get('article_1')) {
$article = Article::find(1);
Cache::forever('article_1',$article);
}
これは最も基本的な使い方で、キャッシュが存在するかどうかを自動的に判断し、存在しない場合はデータベースからキャッシュを取り出して書き込む。その後、モデルはrememberとremember Foreverの方法を持っていることが分かりました。例えば、このようにしてもいいです。
$article = Article::rememberForever('article_1')->where('id','=',1);
この制限があります。複雑なクエリでは、With()を使用して関連データをプリロードした場合は、関連データをキャッシュすることができません。その後、CacheがResponseのようにマクロをカスタマイズできることがわかったので、次のように試してみました。
//
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の中のアプリに置いてもいいです。before()の中で、自分のプロジェクトの都合に合わせて、どのように使うかを見てください。
$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']);
});
個人的にはこのような書き方が好きです。この文章が好きになってほしいです。