Laravel缓存机制在执行时工作正常:
$users = User::remember(10)->get();
但在做的时候:
$users = User::with('posts','addresses')->remember(10)->get();
它不会缓存整个查询集,特别是连接查询(急切加载)。
有没有办法缓存上面示例中执行的所有查询? 谢谢!
答案 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(...)