如何使用 Laravel Cache::remember 和回调函数
How to use Laravel Cache::remember with a callback function
我想引用一个私有函数作为 Cache::remember 函数的第三个参数。
而不是这个 (为了更清晰的代码删除了 try{}catch()):
class ApiController extends Controller
{
public function index(){
$data = Cache::remember('dataKey', 60, function () {
return Model::multipleMethodsHere()->get();
});
return response()->json($data,200);
}
}
我想这样做:
class ApiController extends Controller
{
public function index(){
$data = Cache::remember('dataKey', 60, $this->getIndex());
return response()->json($data,200);
}
private function getIndex(){
return Model::....->get();
}
}
如果我尝试引用私有函数,就会出现此错误。
Argument 3 passed to Illuminate\Cache\Repository::remember() must be an instance of Closure, instance of Illuminate\Database\Eloquent\Collection given
可能吗?如果是,我该怎么办?
根据对 OP 的讨论中的评论,re-strategize Cache:remember
将成为 getIndex
函数的一部分,例如:
class ApiController extends Controller
{
public function index(){
$data = $this->getIndex();
return response()->json($data,200);
}
private function getIndex(string $dataKey = 'dataKey', int $time = 60){
return Cache::remember($dataKey, $time, function () {
return Model::....->get();
})
}
}
我想引用一个私有函数作为 Cache::remember 函数的第三个参数。
而不是这个 (为了更清晰的代码删除了 try{}catch()):
class ApiController extends Controller
{
public function index(){
$data = Cache::remember('dataKey', 60, function () {
return Model::multipleMethodsHere()->get();
});
return response()->json($data,200);
}
}
我想这样做:
class ApiController extends Controller
{
public function index(){
$data = Cache::remember('dataKey', 60, $this->getIndex());
return response()->json($data,200);
}
private function getIndex(){
return Model::....->get();
}
}
如果我尝试引用私有函数,就会出现此错误。
Argument 3 passed to Illuminate\Cache\Repository::remember() must be an instance of Closure, instance of Illuminate\Database\Eloquent\Collection given
可能吗?如果是,我该怎么办?
根据对 OP 的讨论中的评论,re-strategize Cache:remember
将成为 getIndex
函数的一部分,例如:
class ApiController extends Controller
{
public function index(){
$data = $this->getIndex();
return response()->json($data,200);
}
private function getIndex(string $dataKey = 'dataKey', int $time = 60){
return Cache::remember($dataKey, $time, function () {
return Model::....->get();
})
}
}