Laravel通过急切加载缓存查询

时间:2014-09-23 12:30:40

标签: mysql caching laravel laravel-4 eloquent

Laravel缓存机制在执行时工作正常:

$users = User::remember(10)->get();

但在做的时候:

$users = User::with('posts','addresses')->remember(10)->get();

它不会缓存整个查询集,特别是连接查询(急切加载)。

有没有办法缓存上面示例中执行的所有查询? 谢谢!

2 个答案:

答案 0 :(得分:4)

你可以内联:

User::with(['posts' => function ($q) {
  $q->remember(10);
}, 'addresses' => function ($q) {
  $q->remember(10);
}])->remember(10)->get();

或在关系定义中:

public function posts()
{
  return $this->hasMany('Post')->remember(10);
}

答案 1 :(得分:2)

您无法以这种方式缓存eagler loading个查询。您有两种解决方案可供选择 - cache::remember引擎:

$users = Cache::remember('custom_cache_key', 10, function() {
    return User::with('posts', 'addresses')->get();
});

使用查询构建器构建单个查询:

...->select(...)->join(...)->where(...)->remember(...)