在 Laravel 中缓存范围查询
Caching scope queries in Laravel
我正在尝试在我的 Laravel 5.0 项目中实施缓存
我在网上看到的很多缓存的例子都不是范围查询,有点迷糊。这是我的模型中的一个 query/method,它 return 是我所有 类 的 subject_code
和 course_no
的串联
/**
* Get all course codes and titles
* Used in the autocomplete search
* @param $query
* @return mixed
*/
public function scopeAllCourseNo($query) {
return $query
->orderBy('course_no')
->groupBy(
DB::raw("subject_code || ' ' || course_no")
)
->get()
;
}
由于该方法的第一行只是一个 return,我很好奇我可以在哪里放置 Cache::add('', $allClasses, 30);
查询?我应该放在哪里:
if (Cache::has('allClasses'))
{
return Cache::get('allClasses');
}
非常感谢。
您没有在模型中缓存。你缓存在你的控制器中。
所以在你的控制器中:
你可以使用Cache add(),但我更喜欢Cache::remember()。 https://laravel.com/api/5.2/Illuminate/Cache/Repository.html#method_remember
$classes = Cache::remember('classes', 60, function() {
return Class::allCourseNo()->get();
});
我正在尝试在我的 Laravel 5.0 项目中实施缓存
我在网上看到的很多缓存的例子都不是范围查询,有点迷糊。这是我的模型中的一个 query/method,它 return 是我所有 类 的 subject_code
和 course_no
/**
* Get all course codes and titles
* Used in the autocomplete search
* @param $query
* @return mixed
*/
public function scopeAllCourseNo($query) {
return $query
->orderBy('course_no')
->groupBy(
DB::raw("subject_code || ' ' || course_no")
)
->get()
;
}
由于该方法的第一行只是一个 return,我很好奇我可以在哪里放置 Cache::add('', $allClasses, 30);
查询?我应该放在哪里:
if (Cache::has('allClasses'))
{
return Cache::get('allClasses');
}
非常感谢。
您没有在模型中缓存。你缓存在你的控制器中。
所以在你的控制器中:
你可以使用Cache add(),但我更喜欢Cache::remember()。 https://laravel.com/api/5.2/Illuminate/Cache/Repository.html#method_remember
$classes = Cache::remember('classes', 60, function() {
return Class::allCourseNo()->get();
});