Jon*_*nas 5 mysql caching laravel eloquent laravel-4
在执行以下操作时,Laravel缓存机制可以正常工作:
$users = User::remember(10)->get();
Run Code Online (Sandbox Code Playgroud)
但在做的时候:
$users = User::with('posts','addresses')->remember(10)->get();
Run Code Online (Sandbox Code Playgroud)
它不会缓存整个查询集,特别是连接查询(eager loading).
有没有办法缓存上面示例中执行的所有查询?谢谢!
您可以内联进行:
User::with(['posts' => function ($q) {
$q->remember(10);
}, 'addresses' => function ($q) {
$q->remember(10);
}])->remember(10)->get();
Run Code Online (Sandbox Code Playgroud)
或在关系定义中:
public function posts()
{
return $this->hasMany('Post')->remember(10);
}
Run Code Online (Sandbox Code Playgroud)
小智 2
您无法以这种方式缓存eagler 加载查询。您有 2 个解决方案可供选择 - cache::remember引擎:
$users = Cache::remember('custom_cache_key', 10, function() {
return User::with('posts', 'addresses')->get();
});
Run Code Online (Sandbox Code Playgroud)
或使用查询生成器构建单个查询:
...->select(...)->join(...)->where(...)->remember(...)
Run Code Online (Sandbox Code Playgroud)