在Laravel 5.1中缓存Lazy Eager加载查询

时间:2015-10-29 08:08:22

标签: php laravel caching laravel-5.1 eager-loading

如何根据模型关系缓存延迟的热切加载查询。例如 -

$books = App\Book::all();

$books->load('author', 'publisher');

我可以用这样的东西缓存第一个查询

$books = Cache::remember('allbooks', 60, function() {
             return App\Book::all();
         });

如何缓存第二个查询?

如果没有直接的方式,请建议任何解决方法,可能还有示例代码。

更新:我需要单独执行第二个查询,以便我可以单独清除这两个缓存键。

1 个答案:

答案 0 :(得分:3)

您可以使用查询构建器with方法:

$books = App\Book::with(['author','publisher'])->get();

或者只是在缓存中进行额外加载可调用:

$books = Cache::remember('allbooks', 60, function() {
     return App\Book::all()->load('author', 'publisher');
});

更新:为了保持缓存分离,您需要两个变量,如下所示:

$books = Cache::remember('allbooks', 60, function() 
{
     return App\Book::all();
});
$booksAP = Cache::remember('allbooks_ap', 60, function() use ($books)
{
     return $books->load('author', 'publisher');
});